有没有一种方法可以按一列中的值对数据进行分组,以生成 pandas 中其他列中的内容之和?

问题描述 投票:0回答:2

如果这是重复,我很抱歉,我找不到任何可以给我答案的东西......

我有一个包含像素值和该值的像素数的数据帧。它看起来像这样:

Value    Count 
0.1457   900  
0.1458   1800
0.1459   900
0.2144   1800  
0.4357   2700
0.5764   900
0.7891   1800
0.7892   900
nan      0
nan      0

在这种情况下,每个 nan 实例都表示没有数据的单个像素。

我想将这些值分为 4 类,如下所示...:

  • 低:<0.2
  • 中:0.2 - 0.6
  • 高:^0.6 [大于号导致此处格式混乱]
  • 无数据:nan

...然后为每个类生成一个总和,就像使用上面的示例数据一样:

Class    Count
Lo       3600
Mid      6300
Hi       2700
ND       2

我知道这可能需要几个步骤,但是有人有任何指示吗?

python pandas
2个回答
0
投票

您可以使用 Low、Mid、High、NoData 标签创建一个新的

Series
对象,然后将 Series 传递给
groupby
方法。

s = pd.Series('', index=df.index)
s[df.Value.lt(0.2)] = 'Low'
s[df.Value.ge(0.2) & df.Value.lt(0.6)] = 'Mid'
s[df.Value.ge(0.6)] = 'High'
s[df.Value.isna()]] = 'NoData'

counts = df['Count'].groupby(s).sum()
counts['NoData'] = s.value_counts()['NoData']

0
投票
import pandas as pd

df = pd.DataFrame({"Value":[i*0.01 for i in range(1000)],"Count ":list(range(1000))})
df['Class'] = ["Lo" if v < 0.2 else "Mid" if v > 0.2 and v < 0.6 else "Hi" for v in df.Value]    
df.groupby(['Class']).sum()

输出:

班级 价值
4977.5 497750
1.9 190
15.6 1560
© www.soinside.com 2019 - 2024. All rights reserved.