python - 如果列名在列表中,则将数据框中的列一起添加
问题描述
我正在尝试将不同位置的发电厂每小时输出数据加在一起。
我在每个位置都有一系列发电机
genLocations = pd.Series
MDN SL1
HEN WF34, SL2
OTA WF26, SL3
HLY WF16, WF27, SL4
即位置在左边,发电机在右边。
然后我需要将另一个数据框的列加在一起,其中包含不同生成器的每小时输出。我需要将每一列生成器汇总到一个位置。
gen = pd.Dataframe
WF1 WF2 WF3 WF4 WF5 ... SL15 SL16 SL17 SL18 SL19
2007_1_1_p1 9.0 0.0 6.0 8.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
2007_1_1_p2 8.0 0.0 7.0 8.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
2007_1_1_p3 0.0 8.0 7.0 8.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
2007_1_1_p4 4.0 0.0 6.0 8.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
2007_1_1_p5 0.0 0.0 7.0 8.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
我的最终输出应该是这样的
nodes = pd.Dataframe
MDN HEN OTA HLY ....
2007_1_1_p1 7.0 5.0 4.0 6.0 ....
2007_1_1_p2 0.0 0.0 7.0 8.0 ....
到目前为止我已经尝试过
for index, i in genLocations.iteritems():
nodes[index] = gen[[i]].sum(axis='columns')
解决方案
您可以尝试拆分genLocations
和explode
:
s = genLocations.str.split(', ').explode()
d = {v:k for k,v in s.iteritems()}
nodes.groupby(nodes.columns.map(d), axis=1).sum()
注意:explode
在 Pandas 0.25+ 中可用。
推荐阅读
- c# - 如何在递归迭代对象子项时仅在找到特定值后添加数据
- javascript - 打开模式时出现奇怪的空格
- javascript - 如何解决未捕获的 TypeError:无法读取 null 的属性“addEventListener”?
- laravel - Laravel API 资源中的多级关系
- sql - 从表名在当前查询中的表中查询
- java - Java - 从函数返回 BigDecimal?
- angular - 事件执行后如何在Angular 6中刷新jquery数据表
- ios - 在 Xcode 10 上运行通用框架的脚本
- jquery - 如何让 jQuery Quicksearch 以任何顺序接受搜索词?
- php - 为什么我的分页在 Wordpress 中不起作用?