python - 如何添加包含行上聚合信息的列?

标签 python pandas

我有以下数据框:

# Create a dataframe
   raw_data = {'trial_num': ['1', '1', '2', '2', '3', '3'], 
               'area': ['first', 'second', 'first', 'second','first','second'],
               'counts': [10, 25, 36, 2, 70, 10]}

   df = pd.DataFrame(raw_data, columns = ['trial_num', 'area', 'counts'])

  trial_num   area     count
0         1   first     10
1         1  second     25
2         2   first     36
3         2  second      2
4         3   first     70
5         3  second     10

我想添加一个新列“比例”,将每个计数表示为每个“区域”总数的比例。像这样:

       trial_num  area     count  total_count proportion
    0         1   first     10       35    0.2857142857142857
    1         1  second     25       35    0.7142857142857143
    2         2   first     36       38    0.9473684210526315
    3         2  second      2       38    0.05263157894736842
    4         3   first     70       80    0.875
    5         3  second     10       80    0.125

我只做到了这一点:

df.counts.groupby(df.trial_num).sum()

trial_num
1    35
2    38
3    80

有没有一种有效的方法可以在不破坏数据框的情况下做到这一点?请帮忙。

最佳答案

您可以除以divGroupBy.transform 创建的系列与原始 df 大小相同:

df['proportion'] = df['counts'].div(df.groupby(['trial_num'])['counts'].transform('sum'))

替代方案:map :

s = df.groupby(['trial_num'])['counts'].sum()
df['proportion'] = df['counts'].div(df['trial_num'].map(s))
<小时/>
print (df)
  trial_num    area  counts  proportion
0         1   first      10    0.285714
1         1  second      25    0.714286
2         2   first      36    0.947368
3         2  second       2    0.052632
4         3   first      70    0.875000
5         3  second      10    0.125000

关于python - 如何添加包含行上聚合信息的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49449259/

相关文章:

python - 基于 pandas 一定范围的随机日期

python - 为什么 pandas 逻辑运算符没有像它应该的那样在索引上对齐?

python - Pandas 数据框按多行分组

python - 如何在 python 中检查我的图像是 RGB 格式还是 BGR 格式?我如何转换它们,反之亦然?

python - 抑制 python 警告

python - 在 Python 中捕获 Scapy 函数 show_interfaces() 输出

python - 在世界杯锦标赛组内生成配对

python - 在 Flask 应用程序中使用 sql 脚本

python - 比较两个数据框

pandas - 使用 matplotlib 条形图仅堆叠 pandas MultiIndex 数据帧上的一个条形