使用groupby.agg在数据框中添加特定值

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

我正在处理包含不可用格式数据的文件。处理其中一个文件后,我留下一个数据框和一个奇异值。

数据框如下所示:

 df = pd.DataFrame({
        'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
        'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
        'C': [10,10,10,10,10,10,10]
        })

 val = 20.0

该值不应包含在我的数据帧中,但需要包含在我的 TOTAL 计算中。这就是我将其读入数据帧后从文件中提取它的方法(它返回一个字符串,因此我将其转换为浮点数):

if len(df.loc[df['ID'].eq("Settle"), 'C'].values) > 0:
    temp = df.loc[df['ID'].eq("Settle"), 'C']
    if temp.values[0].isnumeric():
        num = float(temp.values[0])
    else:
        num = 0.0
else:
    num = 0.0

现在我需要在以下条件下执行

groupby.agg()

  • 如果
    A == 'foo'
    我需要将val添加到总和中

这是我用来获取

A
中每个值的总和的基本代码,但我无法弄清楚如何影响我的条件。我假设我可以使用
np.where
lambda
但不确定如何将其与
.agg()
一起使用并实现我的输出。

out = df.groupby(['A'], sort=False, as_index=False).agg({"C":"sum"})

预期输出:

A     C
foo   50
fizz  40
python pandas
1个回答
0
投票

您可以在执行聚合之前附加一行额外的值(例如使用

concat
):

out = (pd.concat([df, pd.DataFrame([{'A': 'foo', 'C': 20}])])
         .groupby('A', as_index=False, sort=False)['C'].sum()
      )

输出:

      A   C
0   foo  50
1  fizz  40
© www.soinside.com 2019 - 2024. All rights reserved.