熊猫:如何创建基于其他列值的条件对其他列求和的列?

M_F

我有以下熊猫DataFrame。

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       


....

考虑到列代码(code1,code2,code3,code4),我需要创建一列来汇总列值(value1,value2,value3,value4),如下所示:

  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个列来求和它们的值。

谢谢大家的任何帮助,谢谢。

Doedotdev

这是使用pandas apply方法的解决方案。当您可以使用列/行操作时,通常并不理想。但这有效。

import pandas as pd
data = {
    'code1': ['101', '101', '101', '101', '101', '101'],
    'code2': ['101', '101', '101', '201', '201', '201'],
    'code3': ['101', '101', '101', '201', '201', '301'],
    'code4': ['101', '201', '201', '201', '301', '301'],
    'value1': [1000, 1000, 1000, 1000, 1000, 1000],
    'value2': [1000, 1000, 1000, 1000, 1000, 1000],
    'value3': [1000, 1000, 1000, 1000, 1000, 1000],
    'value4': [1000, 1000, 1000, 1000, 1000, 1000]
}
df = pd.DataFrame(data)

def apply_to_row(row, value):
    code_cols = ['code1', 'code2', 'code3', 'code4']
    value_cols = ['value1', 'value2', 'value3', 'value4']

    code_value_sum = 0
    for code_col, value_col in zip(code_cols, value_cols):
        if row[code_col] == value:
            code_value_sum += row[value_col]

    return code_value_sum

code_values = ['101', '201', '301'] # probably replace with a distinct value list of code columns
for code_value in code_values:
    df['sum_code_' + str(code_value)] = df.apply(apply_to_row, value=code_value, axis=1)

结果如下:

  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   101   201    1000    1000    1000    1000          3000     1000             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

谢谢!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫:如何根据其他列值的条件对列求和?

来自分类Dev

熊猫:如何根据其他列值的条件求和?

来自分类Dev

如何使用熊猫数据框中其他列的条件语句对列中的值求和?

来自分类Dev

基于其他列值的熊猫条件填充

来自分类Dev

如何对其他列的条件求和

来自分类Dev

如何对其他列的条件求和

来自分类Dev

熊猫:求和列,直到满足其他列的条件

来自分类Dev

基于其他列的值的条件更改

来自分类Dev

如何使用其他列值求和

来自分类Dev

如何基于列值创建其他行或数据框

来自分类Dev

有条件地,基于其他两个列的值对列求和

来自分类Dev

如何基于其他列中的值求和单个列的值?

来自分类Dev

基于多个列条件创建其他列

来自分类Dev

如何使用循环创建对其他列求和的列?

来自分类Dev

如何基于其他2列汇总熊猫列的计数

来自分类Dev

Excel:基于其他列的列中的条件格式值

来自分类Dev

熊猫多指标基于其他列中的值减去

来自分类Dev

大熊猫基于其他列分配值

来自分类Dev

熊猫根据其他列中的条件和值创建新列

来自分类Dev

根据熊猫数据框中其他列的条件和值创建新列

来自分类Dev

如何基于SQL中的其他列创建列?

来自分类Dev

根据其他列中的多个条件创建列值

来自分类Dev

基于其他列条件和其他列计算的数据框新列值

来自分类Dev

如何基于其他数据框列替换熊猫列值

来自分类Dev

熊猫以其他人为条件创建列

来自分类Dev

熊猫-基于其他两列的Shift值进行条件计算

来自分类Dev

熊猫时间序列-需要基于其他列的多个条件提取行值

来自分类Dev

基于其他列值的列上的条件格式

来自分类Dev

基于其他列值的估算值

Related 相关文章

热门标签

归档