python - 如何在具有条件的 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'>
解决方案
[]
您可以通过在括号内指定列名列表来过滤所需的列,如下所示:
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
推荐阅读
- c - C fscanf 不加载整数但加载字符串
- odoo - odoo:如何根据条件使记录列表只读
- autodesk-forge - Autodesk Forge 是否支持渲染\查看 3D PDF 文件
- mysql - 如何使用 SQL 过程同时添加新属性和更新值?
- node.js - 如何更好地处理服务中的导出方法?
- firebase - firebase 实时数据库将数据标记为已读
- c++ - 如何设置与背景图像大小相对应的窗口大小?
- typescript - Redux 动态模块:“AnyAction”类型不可分配给“Action”类型
- javascript - 将点符号字符串转换为对象并查找引用对象
- android - 如何将附近的产品获取到 recyclerView 中的当前用户位置