繁体   English   中英

根据条件比较熊猫数据框行

[英]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-132018-08-14x的计数。 如果max(Date)的计数较大,则应选择该行并将其存储在其他数据框中。

与项目z相同,它应比较日期2018-08-132018-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM