我有一个具有2个排序索引的数据框,并且我想仅按diff
排序的顺序在col1
内的列上应用col2
。
mini_df = pd.DataFrame({'col1': ['A', 'B', 'C', 'A'], 'col2': [1,2,3,4], 'col3': [1,4,7,3]})
mini_df = mini_df.set_index(['col1', 'col2']).sort_index()
mini_df['diff'] = mini_df.col3.diff(1)
这给了我
col3 diff
col1 col2
__________________________
A 1 1 nan
4 3 2
B 2 4 1
C 3 7 3
上面,它逐行应用diff
。
我想要的是
col3 diff
col1 col2
__________________________
A 1 1 nan
4 3 2
B 2 4 nan
C 3 7 nan
答案 0 :(得分:2)
您将要使用groupby
将diff
应用于每个组:
mini_df = pd.DataFrame({'col1': ['A', 'B', 'C', 'A'], 'col2': [1,2,3,4], 'col3': [1,4,7,3]})
mini_df = mini_df.set_index(['col1', 'col2']).sort_index()
mini_df['diff'] = mini_df.groupby(axis=0, level='col1')['col3'].diff()
答案 1 :(得分:1)
由于您已经经历了sort
的繁重工作,因此可以diff
并仅在组内分配。您不能shift
使用非日期时间索引,因此无论是Series
还是使用np.roll
,尽管它们会回绕,并且会为单个组{{ 1}}
DataFrame