pandas 基于其他列将行添加到一起

dxxyhpgq  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(145)

我想为列Col2中的特定值添加行。
让我们使用以下dataframe:

Col1 Col2 Value
0   A   1   1
1   A   2   1
2   B   1   2
3   B   2   2
4   B   3   3

现在我想对Col2等于12的行求和,并将其称为1,同时保留Col1中的组。所以我想得到这个:

Col1 Col2 Value
0   A   1   2
2   B   1   4
4   B   3   3

用一般方法是否可能?我试过使用groupby,但似乎不起作用。注意,我有多个列,如Col1和多个value列,因此我希望使用一个通用的解决方案。

n8ghc7c1

n8ghc7c11#

replace 2乘1,则groupby.sum

(df.assign(Col2=df['Col2'].replace(2, 1))
   .groupby(['Col1', 'Col2'], as_index=False).sum()
)

如果要执行多个Map,则为变量:

(df.replace({'Col2': {2: 1}})
   .groupby(['Col1', 'Col2'], as_index=False).sum()
)

输出:

Col1  Col2  Value
0    A     1      2
1    B     1      4
2    B     3      3
gblwokeq

gblwokeq2#

我将替换“Col2”中的值,以便groupby方法可以工作。请注意,一旦“Col2”中的值被替换,您就可以使用常规方法来处理任意数量的组列和值列。

import pandas as pd

# Create example data frame
ex_df = pd.DataFrame(
    {
        'Col1': ['A', 'A', 'B', 'B', 'B'],
        'Col2': [1, 2, 1, 2, 3],
        'Value': [1, 1, 2, 2, 3]
    }
)

# Define mapping 
ex_map = {2: 1}

# Apply mapping to 'Col2' 
solution_df = ex_df.copy()
solution_df['Col2'].replace(ex_map, inplace = True)

# Sum grouping by 'Col1' and 'Col2'
solution_df = solution_df\
    .groupby(['Col1', 'Col2'])\
        .agg({'Value': sum})\
            .reset_index()

print(solution_df)

相关问题