python - 每个日期的聚合数据帧值

标签 python dataframe pandas-groupby

假设我有以下 df:

df = pd.DataFrame({'date': ['2019-01-21', '2019-01-21', '2019-01-22', '2019-01-21', '2019-01-22', '2019-01-22'], 
                   'user_id': [1, 1, 1, 2, 2, 2],
                   'value': ['a', 'b', 'c', 'a', 'a', 'd']})

         date  user_id value
0  2019-01-21        1     a
1  2019-01-21        1     b
2  2019-01-22        1     c
3  2019-01-21        2     a
4  2019-01-22        2     a
5  2019-01-22        2     d

我想添加新列来表示每个 user_id 的唯一值计数以及截至该日期的日期。

即:对于每个用户和日期,计算唯一值的历史记录:user_id=1 在日期 2019-01-21 有 2 个唯一值(a、b),在日期 2019-01-22 有 3 个唯一值(a 和b 来自先前日期,c 来自当前日期)

我想得到以下 df 结果:

         date  user_id value  unique_values_count
0  2019-01-21        1     a                    1
1  2019-01-21        1     b                    2
2  2019-01-22        1     c                    3
3  2019-01-21        2     a                    1
4  2019-01-22        2     a                    1
5  2019-01-22        2     d                    2

最佳答案

你可以这样做:

df['unique_values_count']=df.groupby('user_id')['value'].apply(lambda x: (~pd.Series(x).duplicated()).cumsum())

结果:

         date  user_id value  unique_values_count
0  2019-01-21        1     a                    1
1  2019-01-21        1     b                    2
2  2019-01-22        1     c                    3
3  2019-01-21        2     a                    1
4  2019-01-22        2     a                    1
5  2019-01-22        2     d                    2

关于python - 每个日期的聚合数据帧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70923950/

相关文章:

python - 在数据框中重复一个元素

python - 将 <type 'google.protobuf.pyext._message.RepeatedScalarContainer' > 转换为列表

python - 应用引擎 : Running Python code on the fly

python - 使用与列对应的列表值在 pandas 数据框中插入值

重复一系列值,直到在数据框列中结束

python - 如何使用一个键将多个列表值的数据框制作成python中的字典?

python - django-admin:如何在保存一个对象后重定向到 URL?

python - 应用自定义 groupby 聚合函数来查找 Numpy 数组的平均值

python - 用排序索引替换 Pandas 列

r - 生成引用现有变量的动态变量