【发布时间】:2019-10-26 02:32:58
【问题描述】:
我有一个数据框,我想在其中对 2 列进行分组,从每组中第 3 列的奇数行中减去偶数,并将结果分配给原始数据框中的一列。不过,我从其他答案中尝试的任何方法似乎都对我有用。
示例数据框:
ID Day OtherInfo log_timestamp
A 17 foo t1
A 17 bar t2
A 18 footoo t3
A 18 bar_bar t4
其中 log_timestamp 是一个日期时间对象。
我想要的结果应该是这样的:
ID Day OtherInfo log_timestamp duration
A 17 foo t1 (t2-t1)
A 17 bar t2
A 18 footoo t3 (t4-t3)
A 18 bar_bar t4
我尝试了定义自己的函数、使用 lambda 函数以及使用“apply”、“agg”、“map”和“transform”的组合,但我不太明白。
>>>my_df['duration'] = my_df.groupby(['ID', 'day'])['log_timestamp'].agg({'duration': lambda series: (series - series.shift())[1::2].reset_index(drop=True)})
TypeError: incompatible index of inserted column with frame index
>>>my_df['duration'] = my_df['day'].map(my_df.groupby(['ID', 'day'])['log_timestamp'].apply({'duration': lambda series: (series - series.shift())[1::2].reset_index(drop=True)}))
TypeError: unhashable type: 'dict'
>>>my_df['duration'] = my_df.groupby(['ID', 'day'])['log_timestamp'].transform(lambda series: (series - series.shift())[1::2].reset_index(drop=True))
ValueError: Length of passed values is 1, index implies 2
【问题讨论】:
标签: python pandas pandas-groupby