首页 > 解决方案 > 如何在具有条件的 DataFrame 中逐行添加元素?

问题描述

我有两个字典,一个包含生成器列表,另一个包含它们的值。

dic1 = {
    'coal': ['genCoal1', 'genCoal2', 'genCoal3'],
    'gas': ['genGas1', 'genGas2', 'genGas3']
}
dic2 = {
    'genCoal1': [12,23,34],
    'genCoal2': [14,3,34],
    'genCoal3': [16,24,34],
    'genGas1': [132,23,34],
    'genGas2': [13,257,34],
    'genGas3': [92,53,74],
}

我将第二个字典dic2转换为 pandas DataFrame,所以它看起来像这样:

     genCoal1  genCoal2  genCoal3  genGas1  genGas2  genGas3
0        12        14        16      132       13       92
1        23         3        24       23      257       53
2        34        34        34       34       34       74

我想要做的是我想逐行添加所有煤炭和天然气发电机的值,所以预期的输出应该是这样的:

    coal  gas
0    42  237
1    50  333
2   102  142

我的尝试:

import pandas as pd
dic1 = {
    'coal': ['genCoal1', 'genCoal2', 'genCoal3'],
    'gas': ['genGas1', 'genGas2', 'genGas3']
}
dic2 = {
    'genCoal1': [12,23,34],
    'genCoal2': [14,3,34],
    'genCoal3': [16,24,34],
    'genGas1': [132,23,34],
    'genGas2': [13,257,34],
    'genGas3': [92,53,74],
}
df = pd.DataFrame(dic2)
fuelWise = {}
for i in dic1.keys():
    for j in dic1[i]:
        fuelWise[i] = df[j].sum(axis=1)

print(fuelWise)

但我收到了这个错误

ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>

标签: pythonpandasdataframedictionary

解决方案


[]您可以通过在括号内指定列名列表来过滤所需的列,如下所示:

coal = df[dic1['coal']].sum(axis=1)
gas = df[dic1['gas']].sum(axis=1)

然后您可以将两个输出组合成一个数据帧:

sol = pd.concat([coal, gas], axis=1)

最后我们将更改列的名称:

sol.columns = dic1.keys()

输出:

print(sol)
>>>    coal  gas
>>> 0    42  237
>>> 1    50  333
>>> 2   102  142

推荐阅读