Создать столбец на основе условия python pandas - PullRequest
0 голосов
/ 24 января 2020

Вот пример данных

import pandas as pd
df=pd.DataFrame({'P_Name':['ABC','ABC','ABC','ABC','PQR','PQR','PQR','PQR','XYZ','XYZ','XYZ','XYZ'],
   'Date':['11/01/2020','12/01/2020','13/01/2020','14/01/2020','11/01/2020','12/01/2020','13/01/2020','14/01/2020','11/01/2020','12/01/2020','13/01/2020','14/01/2020'],
    'Open':['242.584','238.179','233.727','229.441','241.375','28.965','235.96','233.193','280.032','78.472','277.592','276.71'],
    'End':['4.405','4.452','4.286','4.405','2.41','3.005','2.767','3.057','1.56','0.88','0.882','0.88'],
    'Close':['238.179','233.727','229.441','225.036','238.965','235.96','233.193','230.136','278.472','277.592','276.71','275.83']})

Я пытаюсь создать новый столбец, в котором будет условие, что для каждой новой записи продукта соответствующий будет 1 И также должен будет проверьте условие, если df['Close'][0] == df['Open'][1] совпадают, значение будет 1, если не совпадает (например, df['Close'][8] == df['Open'][9]), то 0 df после этих условий

   P_Name        Date     Open    End    Close   Check
0     ABC  11/01/2020  242.584  4.405  238.179   1
1     ABC  12/01/2020  238.179  4.452  233.727   1
2     ABC  13/01/2020  233.727  4.286  229.441   1
3     ABC  14/01/2020  229.441  4.405  225.036   1
4     PQR  11/01/2020  241.375   2.41  238.965   1
5     PQR  12/01/2020  28.965   3.005   235.96   0
6     PQR  13/01/2020   235.96  2.767  233.193   1
7     PQR  14/01/2020  233.193  3.057  230.136   1
8     XYZ  11/01/2020  280.032   1.56  278.472   1
9     XYZ  12/01/2020   78.472   0.88  277.592   0
10    XYZ  13/01/2020  277.592  0.882   276.71   1
11    XYZ  14/01/2020   276.71   0.88   275.83   1

Ответы [ 2 ]

3 голосов
/ 24 января 2020

Вы можете сравнить смещенные значения для групп на DataFrameGroupBy.shift с Series.eq с заменой отсутствующих значений на другой столбец на Series.fillna с приведенной маской на 0,1 с Series.astype:

df['Check'] = df.Open.eq(df.groupby('P_Name').Close.shift().fillna(df.Open)).astype(int)

Идея Anothr заключается в сравнении без групп, но добавьте другую маску с Series.duplicated для совпадения первых строк в группы:

df['Check'] = (~df.P_Name.duplicated() | df.Open.eq(df.Close.shift())).astype(int)

print (df)
   P_Name        Date     Open    End    Close  Check
0     ABC  11/01/2020  242.584  4.405  238.179      1
1     ABC  12/01/2020  238.179  4.452  233.727      1
2     ABC  13/01/2020  233.727  4.286  229.441      1
3     ABC  14/01/2020  229.441  4.405  225.036      1
4     PQR  11/01/2020  241.375   2.41  238.965      1
5     PQR  12/01/2020   28.965  3.005   235.96      0
6     PQR  13/01/2020   235.96  2.767  233.193      1
7     PQR  14/01/2020  233.193  3.057  230.136      1
8     XYZ  11/01/2020  280.032   1.56  278.472      1
9     XYZ  12/01/2020   78.472   0.88  277.592      0
10    XYZ  13/01/2020  277.592  0.882   276.71      1
11    XYZ  14/01/2020   276.71   0.88   275.83      1
0 голосов
/ 24 января 2020
check = []
for i in range(df.index - 1):
   if df['Close'][i] == df['Open'][i+1]:
       check.append (1)
   else
       check.append (0)
df['Check'] = check
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...