首页 > 解决方案 > 如果列名在列表中,则将数据框中的列一起添加

问题描述

我正在尝试将不同位置的发电厂每小时输出数据加在一起。

我在每个位置都有一系列发电机

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')

标签: pythonpandasnumpy

解决方案


您可以尝试拆分genLocationsexplode

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+ 中可用。


推荐阅读