显示qcut()bin标签的值之和

2024-06-28 19:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据另一列的binning对一列值求和

df = pd.read_csv("data_file.csv",  na_values=' ')
hincp = df.HINCP.dropna()
grouping = pd.qcut(hincp, 3, labels=["low", "medium", "high"])

我想根据“低”、“中”和“高”存储箱对另一列df['WGTP']的值求和,并显示每个存储箱的计数。像这样:

         WGTP_count
low           12300
medium         3455
high          65500

(假设数字)我会使用groupby吗?价值计算?我真的不知道该怎么办


Tags: csvdfreaddatafilelowpdmedium
1条回答
网友
1楼 · 发布于 2024-06-28 19:20:36

我使代码更通用,以便为其他人服务,我将让您调整列名以匹配您的示例:

  • to_bins是使用.qcut创建分位数的列
  • to_sum是要基于分位数求和的值

初始df:

import pandas as pd

cols = ['to_bins', 'to_sums']
df = pd.DataFrame([[1, 10], [2, 20], [3, 30], [1, 10],[2, 20], [3, 30]], columns=cols)

输出:

   to_bins to_sums
0       1      10
1       2      20
2       3      30
3       1      10
4       2      20
5       3      30

使用qcut创建分位数并分配给bins列:

df['bins'] = pd.qcut(df.to_bins, 3, labels=['low', 'medium', 'high']).values

输出:

   to_bins  to_sums    bins
0        1       10     low
1        2       20  medium
2        3       30    high
3        1       10     low
4        2       20  medium
5        3       30    high

根据这些容器求和值(.reset_index()用于将groupby的输出转换回数据帧,如果需要,您可以进一步操作该数据帧):

df.groupby(['bins'])['to_sums'].sum().reset_index()

输出:

     bins  to_sums
0     low      20
1  medium      40
2    high      60

相关问题 更多 >