我有以下数据:
date locid month price
11/2/2017 17 11/1/2017 -0.0025
11/2/2017 17 12/1/2017 0
11/2/2017 105 11/1/2017 -0.895
11/2/2017 105 12/1/2017 -1
11/3/2017 17 11/1/2017 -0.0025
11/3/2017 17 12/1/2017 0.01
11/3/2017 105 11/1/2017 -0.895
11/3/2017 105 12/1/2017 -1.01
我想返回一个结果,该结果显示每个日期每个月的每个locid的价格差异。结果将只有四行:
date month price
11/2/2017 11/1/2017 0.8925
11/2/2017 12/1/2017 1
11/3/2017 11/1/2017 0.8925
11/3/2017 12/1/2017 1.02
我仅通过以下行获得了结果:
df.loc[df['locid']==17].price - df.loc[df['locid']==105].price
但是,我认为这不是一个可靠的解决方案。在对df.date列进行排序之前,我的结果包含八行。另外,我不确定python / pandas是否与df.months匹配,我认为它们可能恰好处于正确的顺序。
我想知道如何:
1)确保我以正确的顺序进行减法(在这种情况下,我要使用locid 17-105),如果它们在我的数据中以相反的顺序怎么办?如果有三个locid,而我只想看到两个,该怎么办?
2)确保locid 17-105是date == 11/2/2017和month == 11/1/2017。 IE日期和月份必须匹配,然后减去
3)如果首先进行数据透视,该如何进行减法
谢谢
答案 0 :(得分:0)
将groupby
与diff
一起使用,然后将内部concat
回到原始df
df1=df.drop(['locid','price'],axis = 1)
df2=df.groupby(['date','month']).price.diff().dropna().abs()
pd.concat([df1,df2], axis = 1 ,join ='inner' )
Out[552]:
date month price
2 11/2/2017 11/1/2017 0.8925
3 11/2/2017 12/1/2017 1.0000
6 11/3/2017 11/1/2017 0.8925
7 11/3/2017 12/1/2017 1.0200