仅在同一行索引内应用函数?

时间:2019-03-05 04:43:24

标签: python pandas

我有一个具有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

2 个答案:

答案 0 :(得分:2)

您将要使用groupbydiff应用于每个组:

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