[英]Compare pandas dataframe rows based on condition
我有一个数据框( df
)如下:
d = {'Item':['x','y','z','x','z'], 'Count' : ['10', '11', '12', '9','10'], 'Date' : pd.to_datetime(['2018-8-14', '2018-8-14', '2018-8-14', '2018-8-13','2018-8-13'])}
df= pd.DataFrame(data=d)
Item Count Date
x 10 2018-08-14
y 11 2018-08-14
z 12 2018-08-14
x 9 2018-08-13
x 9 2018-08-12
z 10 2018-08-13
我想根据以下内容比较行:对于每个项目,将max(Date)
的计数与max(Date) - 1
。
意味着它应该比较日期为2018-08-13
和2018-08-14
项x
的计数。 如果max(Date)
的计数较大,则应选择该行并将其存储在其他数据框中。
与项目z
相同,它应比较日期2018-08-13
和2018-08-14
的计数,并且由于计数较大,因此应为项目z
选择计数为12
。
输出:df2
Item Count Date
x 10 2018-08-14
z 12 2018-08-14
我尝试了以下方法:
if ((df.Item == df.Item) and
(df.Date > df.Date) and (df.Count > df.Count)):
print("we met the conditions!")
使用merge
关键Item
df.loc[df.reset_index().merge(df,on='Item').loc[lambda x : (x['Count_x']>x['Count_y'])&(x['Date_x']>x['Date_y'])]['index'].unique()]
Out[49]:
Item Count Date
0 x 10 2018-08-14
2 z 12 2018-08-14
感谢@Wen,我得以将他的工作分解为更基本的版本。
创建具有max(date)
和max(date)-1
值的临时数据集
t_day = df[df.Date == df.Date.max()]
y_day = df[df.Date == df.Date.max() - pd.to_timedelta(1, unit='d')]
合并临时数据帧以创建主临时文件
temp = t_day.merge(y_day, on = 'Item', how='outer')
temp = temp.dropna()
定义功能以创建所需条件
def func(row):
if (int(row['Count_x']) > int(row['Count_y']) & (row['Date_x'] > row['Date_y'])):
return '1'
else:
return '0'
temp['cond'] = temp.apply(func, axis=1)
删除未使用的列
temp.drop(['Count_y','Date_y','cond'],axis = 1, inplace=True)
print(temp)
现在返回:
Count_x Date_x Item
10 2018-08-14 x
12 2018-08-14 z
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.