【发布时间】:2015-08-24 23:52:59
【问题描述】:
获取以下数据框:
import pandas as pd
df = pd.DataFrame({'group_name': ['A','A','A','B','B','B'],
'timestamp': [4,6,1000,5,8,100],
'condition': [True,True,False,True,False,True]})
我要添加两列:
- 行在其组中的顺序
- 每个组内
condition列的滚动总和
我知道我可以通过自定义应用来做到这一点,但我想知道是否有人有任何有趣的想法? (当有很多组时,这也很慢。)这是一个解决方案:
def range_within_group(input_df):
df_to_return = input_df.copy()
df_to_return = df_to_return.sort('timestamp')
df_to_return['order_within_group'] = range(len(df_to_return))
df_to_return['rolling_sum_of_condition'] = df_to_return.condition.cumsum()
return df_to_return
df.groupby('group_name').apply(range_within_group).reset_index(drop=True)
【问题讨论】:
-
还可以使用
rank()根据时间戳获取订单(又名排名)。如果需要,还可以为您提供处理关系的方法。