python - 计算按日期和标签分组的行中列表元素的频率

标签 python pandas list dataframe metadata

我有一个数据框 df,它看起来像这样:

ID       Date        Input
   1         1-Nov       A,B
   1         2-NOV       A
   2         3-NOV       A,B,C
   2         4-NOV       B,D

我希望我的输出计算每个输入的出现次数,如果它是连续的,否则再次将其重置为零(如果 ID 相同则只计数),而且输出应该重命名为 X.A、X.B、X.C 和 X.D 所以我的输出将如下所示:

ID      Date       Input      X.A      X.B      X.C      X.D
   1       1-NOV      A,B        1      1      0      0
   1       2-NOV      A          2      0      0      0
   2       3-NOV      A,B,C      1      1      1      0
   2       4-NOV      B,D        0      2      0      1

我如何创建输出(A、B、C 和 D)来计算输入的发生日期和 ID。

最佳答案

使用Series.str.get_dummies对于指标列,然后每组计算连续 1 - 所以使用 GroupBy.cumsum减去 GroupBy.ffill , 通过 DataFrame.add_prefix 更改列名称最后DataFrame.join转为原文:

a = df['Input'].str.get_dummies(',') == 1
b = a.groupby(df.ID).cumsum().astype(int)
df1 = (b-b.mask(a).groupby(df.ID).ffill().fillna(0).astype(int)).add_prefix('X.')

df = df.join(df1)
print (df)
   ID   Date  Input  X.A  X.B  X.C  X.D
0   1  1-Nov    A,B    1    1    0    0
1   1  2-NOV      A    2    0    0    0
2   2  3-NOV  A,B,C    1    1    1    0
3   2  4-NOV    B,D    0    2    0    1

关于python - 计算按日期和标签分组的行中列表元素的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58935476/

相关文章:

python - 在Python中将Dataframe写入和读取文件的正确方法

python - python 中的 fft 没有在正确的位置显示峰值

python - Pandas replace() 对所有屏蔽值

python - 我的图表上未显示滚动平均值

python - 根据另一个数据帧索引中的日期和月份重新排列数据帧

python - 将字符串列表转换为数字列表 Python

python 切片在列表中设置

Python:是否可以有一个类方法作用于类的一部分?

python - 当从 bash 调用脚本时终止子进程

运行测试时不导入 Python 嵌套子包