首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sum后面给DF添加新列?

在sum后面给DF添加新列?
EN

Stack Overflow用户
提问于 2020-11-18 23:51:48
回答 3查看 54关注 0票数 1

下面我有一个数据样本:

代码语言:javascript
复制
sn C1-1 C1-2 C1-3 H2-1 H2-2 K3-1 K3-2
1   4     3    5    4    1    4    2
2   2     2    0    2    0    1    2
3   1     2    0    0    2    1    2

我想要基于前缀C1,H2,K3和输出三个新列的总和。最后的结果是:

代码语言:javascript
复制
sn total_c1 total_h2 total_k3
1      12      5        6
2      4       2        3
3      3       2        3

我在我的原始df上尝试过的东西:

代码语言:javascript
复制
lst = ["C1", "H2", "K3"]
lst2 = ["total_c1", "total_h2", "total_k3"]

for k in lst:
    idx = df.columns.str.startswith(i)
    for j in lst2:
        df[j] = df.iloc[:,idx].sum(axis=1)
        df1 = df.append(df, sort=False)

但我一直在犯错误

代码语言:javascript
复制
IndexError: Item wrong length 35 instead of 36.

我想不出如何在循环中追加新的总计列来生成我的最终结果。

任何帮助都将受到感谢(或更好的建议,作为反对循环)。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-18 23:56:01

您可以使用groupby

代码语言:javascript
复制
# columns of interest
cols = df.columns[1:]

col_groups = cols.str.split('-').str[0]
out_df = df[['sn']].join(df[cols].groupby(col_groups, axis=1)
                            .sum()
                            .add_prefix('total_')
                        )

输出:

代码语言:javascript
复制
   sn  total_C1  total_H2  total_K3
0   1        12         5         6
1   2         4         2         3
2   3         3         2         3
票数 1
EN

Stack Overflow用户

发布于 2020-11-18 23:57:46

让我们试试看,split,然后groupbyaxis=1一起

代码语言:javascript
复制
out = df.groupby(df.columns.str.split('-').str[0],axis=1).sum().set_index('sn').add_prefix('Total_').reset_index()
Out[84]: 
   sn  Total_C1  Total_H2  Total_K3
0   1        12         5         6
1   2         4         2         3
2   3         3         2         3
票数 0
EN

Stack Overflow用户

发布于 2020-11-21 09:05:53

另一个选项是,我们创建一个按列分组的字典:

代码语言:javascript
复制
mapping = {entry: f"total_{entry[:2]}" for entry in df.columns[1:]}
result = df.groupby(mapping, axis=1).sum()
result.insert(0, "sn", df.sn)
result

   sn   total_C1    total_H2    total_K3
0   1      12          5          6
1   2      4           2          3
2   3      3           2          3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64903216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档