python - 按组计数并分配给新变量

标签 python pandas

我想知道是否有更简单的方法从以下数据创建按 id 分组的变量“freq_t1”和“freq_t2”:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'id':[1,1,1,2,2,2],
    'time':[1,1,2,3,2,2]
})

df = pd.DataFrame({
    'id':[1,1,1,2,2,2],
    'time':[1,1,2,3,2,2],
    'freq_t1':[2,2,2,0,0,0],
    'freq_t2':[1,1,1,2,2,2]
})

也就是说,id == 1 有两个 time == 1 的观测值,而 id == 2 的观测值为零。类似地,id == 1 有一个 time == 2 的观察值,而 id == 2 有两个。

最佳答案

在“时间”列上使用广播比较与您选择的时间值,然后使用 groupbytransform 将总和广播到原始列。这是一个例子:

tvals = [1, 2]
(pd.DataFrame(df['time'].values[:,None] == tvals, columns=tvals)
   .groupby(df['id'])
   .transform('sum')
   .astype(int)
   .add_prefix('freq_t'))

   freq_t1  freq_t2
0        2        1
1        2        1
2        2        1
3        0        2
4        0        2
5        0        2

tvals = [1, 2, 3] 时,这会产生

   freq_t1  freq_t2  freq_t3
0        2        1        0
1        2        1        0
2        2        1        0
3        0        2        1
4        0        2        1
5        0        2        1

如果您想要所有 t 值的列,您还可以使用 get_dummies:

pd.get_dummies(df.time).groupby(df.id).transform('sum').add_prefix('freq_t')

   freq_t1  freq_t2  freq_t3
0        2        1        0
1        2        1        0
2        2        1        0
3        0        2        1
4        0        2        1
5        0        2        1

最后,要将结果连接到 df,请使用 pd.concat:

res = pd.get_dummies(df.time).groupby(df.id).transform('sum').add_prefix('freq_t')
pd.concat([df, res], axis=1)

   id  time  freq_t1  freq_t2  freq_t3
0   1     1        2        1        0
1   1     1        2        1        0
2   1     2        2        1        0
3   2     3        0        2        1
4   2     2        0        2        1
5   2     2        0        2        1

关于python - 按组计数并分配给新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56245845/

相关文章:

python-3.x - 基于另一列合并 pandas 数据框中的间隔

python - 使用 Matplotlib 注释注释

python - 如何将 3 维数组保存到 csv 文件中?

python - 读取所有子目录中的wav文件

python - 删除元素,然后迭代并组合列表中的元素python

python - 使用自定义谓词对 numpy 数组进行排序

python - Pandas :Record count inserted by Python TO_SQL funtion

python - 从其他数据帧特定行中减去数据帧行

python - 使用平均阈值过滤数据帧

python - 使用 Pandas 在python中循环遍历多个excel文件