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

时间:2018-08-14 15:31:26

标签: python pandas

我有一个数据框(temp1 = temp2.map(f => f.filter(parsed => parsed._2.errors.nonEmpty)))如下:

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,日期x2018-08-13的计数。如果2018-08-14的计数较大,则应选择该行并将其存储在其他数据框中。

与项目max(Date)相同,它应将日期z2018-08-13的计数进行比较,并且由于计数较大,因此应为2018-08-14的项目选择具有计数的行z

输出: df2

12

我尝试了以下操作:

Item     Count     Date
x        10        2018-08-14
z        12        2018-08-14

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

感谢@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