我有几个数据框:
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
如果不逐行进行,我似乎无法实现这一点...但是必须有更好的方法,因为我有数千行和数百列。
??
谢谢,
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