pandas数据框架:如何根据某一列的值聚合一个行的子集[英] pandas dataframe: how to aggregate a subset of rows based on value of a column

本文是小编为大家收集整理的关于pandas数据框架:如何根据某一列的值聚合一个行的子集的处理方法,想解了pandas数据框架:如何根据某一列的值聚合一个行的子集的问题怎么解决?pandas数据框架:如何根据某一列的值聚合一个行的子集问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个像这样构成的熊猫数据框架:

      value
lab        
A        50
B        35
C         8
D         5
E         1
F         1

这只是一个示例,实际的数据帧更大,但遵循相同的结构.
示例数据帧是用这两行创建的:

df = pd.DataFrame({'lab':['A', 'B', 'C', 'D', 'E', 'F'], 'value':[50, 35, 8, 5, 1, 1]})
df = df.set_index('lab')

我想汇总其值较小的行的行:所有这些行应由一个行替换为一个行,其值为替换行的总和.

例如,如果我选择一个阈值= 6,则预期的结果应为以下:

      value
lab        
A        50
B        35
C         8
X         7 #sum of D, E, F

我该怎么做?

我想使用groupby(),但是我看到的所有示例都涉及使用单独的列进行分组,因此我不知道在这种情况下如何使用它.
通过执行df.loc[df['value'] < threshold],我可以选择小于我的阈值的行,但我不知道如何仅总和这些行并将其余的数据帧不变.

推荐答案

使用带有Exlargement 用过滤DataFrame:

threshold = 6
m = df['value'] < threshold
df1 = df[~m].copy()
df1.loc['Z'] = df.loc[m, 'value'].sum()

print (df1)
     value
lab       
A       50
B       35
C        8
Z        7

另一个解决方案:

m = df['value'] < threshold
df1 = df[~m].append(df.loc[m, ['value']].sum().rename('Z'))
print (df1)
     value
lab       
A       50
B       35
C        8
Z        7

其他推荐答案

您可以使用 and DataFrame.append DataFrame.append 在"单线"中实现这一目标:

thresh = 6

(df[lambda x: x['value'] >= thresh]
 .append(df[lambda x: x['value'] < thresh].sum().rename('X')))

或者如果您喜欢

mask = df['value'].ge(thresh)

df[mask].append(df[~mask].sum().rename('X'))

[out]

     value
lab       
A       50
B       35
C        8
X        7

本文地址:https://www.itbaoku.cn/post/1727925.html