python - 如何在 Pandas 中添加 "order within group"列?

标签 python pandas

采用以下数据框:

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]})

我想添加两列:

  1. 该行在其组内的顺序
  2. 每组内条件列的滚动总和

我知道我可以通过自定义应用来做到这一点,但我想知道是否有人有任何有趣的想法? (当有很多组时,这也很慢。)这是一种解决方案:

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)

最佳答案

GroupBy.cumcount做:

Number each item in each group from 0 to the length of that group - 1.

很简单:

>>> gr = df.sort('timestamp').groupby('group_name')
>>> df['order_within_group'] = gr.cumcount()
>>> df['rolling_sum_of_condition'] = gr['condition'].cumsum()

关于python - 如何在 Pandas 中添加 "order within group"列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744308/

相关文章:

python - 按日期排列的 Watson 对话日志

python - 在python中模拟长按键

python - 检查模型输入 : expected convolution2d_input_1 to have shape (None, 3、32、32) 时出错,但得到形状为 (50000、32、32、3) 的数组

python - 如何使用多索引 df 中的 2 行执行计算并将结果附加为新行?

原生数据容器与 Pandas DataFrame 的 Python 性能对比

python - pandas 箱线图作为具有单独 y 轴的子图

python - Python 2.7 函数是否记住值而不是引用?关闭怪异

python - centos6.9 上的 cassandra 无法连接到服务器

python - 如何设置从第三列绘制值的条件? python / Pandas

python - pandas和python中特殊条件下将dataframe中的数据转换为列表