我有以下数据框
import pandas as pd
df = pd.read_csv('filename.csv')
print(df)
code1 code2 code3 code4 value1 value2 value3 value4
0 101 101 101 101 1000 1000 1000 1000
1 101 101 101 201 1000 1000 1000 1000
2 101 101 201 201 1000 1000 1000 1000
3 101 201 201 201 1000 1000 1000 1000
4 101 201 201 301 1000 1000 1000 1000
5 101 201 301 301 1000 1000 1000 1000
6 101 301 301 301 1000 1000 1000 1000
7 101 101 101 301 1000 1000 1000 1000
8 101 201 301 0 1000 1000 1000 0
9 101 301 0 0 1000 1000 0 0
....
我需要创建一列来求列值(value1、value2、value3、value4)的和,考虑到列代码(code1、code2、code3、code4),如下所示:
code1 code2 code3 code4 value1 value2 value3 value4 sum_code_101 sum_code_201 sum_code_301
0 101 101 101 101 1000 1000 1000 1000 4000 0 0
1 101 101 101 201 1000 1000 1000 1000 3000 1000 0
2 101 101 201 201 1000 1000 1000 1000 2000 2000 0
3 101 201 201 201 1000 1000 1000 1000 1000 3000 0
4 101 201 201 301 1000 1000 1000 1000 1000 2000 1000
5 101 201 301 301 1000 1000 1000 1000 1000 1000 2000
6 101 301 301 301 1000 1000 1000 1000 1000 0 3000
7 101 101 101 301 1000 1000 1000 1000 3000 0 1000
8 101 201 301 0 1000 1000 1000 0 1000 1000 1000
9 101 301 0 0 1000 1000 0 0 1000 0 1000
我试过:
df['sum_code_101']=df[df['code1']=='101'],['value1']+df[df['code2']=='101'],['value2']+df[df['code3']=='101'],['value3']+df[df['code4']=='101'],['value4']
df['sum_code_201']=df[df['code1']=='201'],['value1']+df[df['code2']=='201'],['value2']+df[df['code3']=='201'],['value3']+df[df['code4']=='201'],['value4']
df['sum_code_301']=df[df['code1']=='301'],['value1']+df[df['code2']=='301'],['value2']+df[df['code3']=='301'],['value3']+df[df['code4']=='301'],['value4']
但是,我收到了以下错误消息:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
由于实际数据帧有25个不同的代码(101、201、301…),我需要创建25个列来求和它们的值
非常感谢你们的帮助,谢谢
您可以使用
pd.wide_to_long
和groupby
的组合来进行一些数据帧重塑输出:
下面是一个使用pandas apply方法的解决方案。通常,当您可以使用列/行操作时,情况并不理想。但这是可行的
结果如下:
谢谢
相关问题 更多 >
编程相关推荐