gpt4 book ai didi

python - Pandas 数据框中以相同字符串开头的列的总和值

转载 作者:太空狗 更新时间:2023-10-29 22:21:39 24 4
gpt4 key购买 nike

我有一个包含大约 100 列的数据框,如下所示:

   Id  Economics-1  English-107  English-2  History-3  Economics-zz  Economics-2  \
0 56 1 1 0 1 0 0
1 11 0 0 0 0 1 0
2 6 0 0 1 0 0 1
3 43 0 0 0 1 0 1
4 14 0 1 0 0 1 0

Histo Economics-51 Literature-re Literatureu4
0 1 0 1 0
1 0 0 0 1
2 0 0 0 0
3 0 1 1 0
4 1 0 0 0

我的目标是只保留全局类别——英语、历史、文学——并分别在此数据框中写入它们的组件值的总和。例如,“English”将是“English-107”和“English-2”的总和:

    Id  Economics      English    History  Literature  
0 56 1 1 2 1
1 11 1 0 0 1
2 6 0 1 1 0
3 43 2 0 1 1
4 14 0 1 1 0

为此,我尝试了两种方法。第一种方法:

df = pd.read_csv(file_path, sep='\t')
df['History'] = df.loc[df[df.columns[pd.Series(df.columns).str.startswith('History')]].sum(axes=1)]

第二种方法:

df = pd.read_csv(file_path, sep='\t')
filter_col = [col for col in list(df) if col.startswith('History')]
df['History'] = 0 # initialize value, otherwise throws KeyError
for c in df[filter_col]:
df['History'] = df[filter_col].sum(axes=1)
print df['History', df[filter_col]]

但是,两者都给出了错误:

TypeError: 'DataFrame' objects are mutable, thus they cannot be
hashed

我的问题是:如何调试此错误或是否有其他解决方案来解决我的问题。请注意,我有一个相当大的数据框,大约有 100 列和 400000 行,所以我正在寻找一个优化的解决方案,比如在 pandas 中使用 loc

最佳答案

我建议您做一些不同的事情,即执行转置,按行(您的原始列)的前缀分组,求和,然后再次转置。

考虑以下几点:

df = pd.DataFrame({
'a_a': [1, 2, 3, 4],
'a_b': [2, 3, 4, 5],
'b_a': [1, 2, 3, 4],
'b_b': [2, 3, 4, 5],
})

现在

[s.split('_')[0] for s in df.T.index.values]

是列的前缀。所以

>>> df.T.groupby([s.split('_')[0] for s in df.T.index.values]).sum().T
a b
0 3 3
1 5 5
2 7 7
3 9 9

做你想做的。

在您的情况下,请确保使用 '-' 字符进行拆分。

关于python - Pandas 数据框中以相同字符串开头的列的总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com