pandas-合并到具有不同列名称的数据集,将第二个值添加到第一个

问题描述 投票:0回答:1

我有几个数据框:

DTime               A B C
2023-02-21 00:00:01 0 0 0 
2023-02-21 00:00:02 0 1 0 
2023-02-21 00:00:03 0 0 2 
2023-02-21 00:00:04 4 2 0 


DTime             AAA BBB CC DDD EE
2023-02-21 00:00:01 0 0 0 1 0
2023-02-21 00:00:02 0 1 0 0 0
2023-02-21 00:00:03 0 0 2 0 1
2023-02-21 00:00:04 1 0 0 0 0

我需要将第一个合并到第二个中,在其中显式映射列并对值求和。即 - 我希望 A sum 变为 AAA,B 变为 BBB,C 变为 CCC:

DTime            AAA BBB CC DDD EE
2023-02-21 00:00:01 0 0 0 1 0
2023-02-21 00:00:02 0 2 0 0 0
2023-02-21 00:00:03 0 0 4 0 1
2023-02-21 00:00:04 5 2 0 0 0

如果不逐行进行,我似乎无法实现这一点...但是必须有更好的方法,因为我有数千行和数百列。

??

谢谢,

python pandas merge
1个回答
0
投票

merge
'DTime'
上的列,然后您将能够对相关列进行求和

如果列名称始终遵循问题中的逻辑(即

df1
中的列名称包含在
df2
中的匹配列名称中),则可以动态构建一个列表
matching_cols
,其中包含包含列名称的元组应该总结一下。

如果情况并非总是如此,您可能需要更改创建逻辑

matching_cols

out = df1.merge(df2, on="DTime")

df1_cols = df1.columns[1:]
df2_cols = df2.columns[1:]

matching_cols = [(col1, col2) for col1 in df1_cols for col2 in df2_cols if col1 in col2]

for col1, col2 in matching_cols:
    out[col2] = out[col2] + out[col1]

out.drop(columns=df1_cols, inplace=True)
                DTime  AAA  BBB  CC  DDD  EE
0 2023-02-21 00:00:01    0    0   0    1   0
1 2023-02-21 00:00:02    0    2   0    0   0
2 2023-02-21 00:00:03    0    0   4    0   1
3 2023-02-21 00:00:04    5    2   0    0   0
© www.soinside.com 2019 - 2024. All rights reserved.