首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中将两个数据组合成一个并聚合公共记录?

如何在python中将两个数据组合成一个并聚合公共记录?
EN

Stack Overflow用户
提问于 2022-08-12 17:50:50
回答 1查看 62关注 0票数 -1

df1:

代码语言:javascript
复制
Date                Code        Name    Rating        x             y          z
2022-07-27 00:00:00 OMER       OMERS    I-2       2027983745    2029539000  1555255.31
2022-07-27 00:00:00 SC        SOCIETY   I-7       389659466.4   391147968.2 1488501.805
2022-07-27 00:00:00 CD      CORPORATION I-3       2692692761    2694172512  1479750.8
2022-07-27 00:00:00 PRIN        AGENT   I-3       72990460.96   74455570    1465109.042
2022-07-27 00:00:00 BF          FUND    S-3       277607047.4   279044540.2 1437492.761

df2:

代码语言:javascript
复制
Date                     Code             Name      Rating            x       y     z
2022-07-27 00:00:00      BankA             nan       nan            1052    1052    0
2022-07-27 00:00:00       CD           CORPORATION   I-3            1943    2000    57
2022-07-27 00:00:00      CorporationA      nan       nan            1943    3052    1109

预期产出:

代码语言:javascript
复制
Date                Code            Name    Rating        x             y          z
2022-07-27 00:00:00 OMER            OMERS   I-2       2027983745    2029539000  1555255.31
2022-07-27 00:00:00 SC             SOCIETY  I-7       389659466.4   391147968.2 1488501.805
2022-07-27 00:00:00 CD          CORPORATION I-3       2692694704    2694174512  1479807.8
2022-07-27 00:00:00 PRIN           AGENT    I-3       72990460.96   74455570    1465109.042
2022-07-27 00:00:00 BF              FUND    S-3       277607047.4   279044540.2 1437492.761
2022-07-27 00:00:00 BankA           nan     nan         1052           1052         0
2022-07-27 00:00:00 CorporationA    nan     nan         1943           3052        1109

我想将df1和df2合并成一个数据帧。在DF2中,如果“代码”、“名称”、“评级”已经存在于df1中,则需要将x、y和z的值相加到一行中,如果没有可用,只需将数据帧底部的值追加。感谢你在这方面的帮助!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 18:04:03

您可以尝试pd.concat然后groupby.agg

代码语言:javascript
复制
cols1 = ['x', 'y', 'z']
cols2 = ['Code', 'Name', 'Rating']
d = {col: 'sum' if col in cols1 else 'first' for col in df1.columns}

df2[cols2] = df2[cols2].fillna('NaN')
out = (pd.concat([df1, df2], ignore_index=True)
       .groupby(cols2)
       .agg(d).reset_index(drop=True))
代码语言:javascript
复制
print(out)

                  Date          Code         Name Rating              x              y           z
0  2022-07-27 00:00:00            BF         FUND    S-3  277607047.400  279044540.200 1437492.761
1  2022-07-27 00:00:00         BankA          NaN    NaN       1052.000       1052.000       0.000
2  2022-07-27 00:00:00            CD  CORPORATION    I-3 2692694704.000 2694174512.000 1479807.800
3  2022-07-27 00:00:00  CorporationA          NaN    NaN       1943.000       3052.000    1109.000
4  2022-07-27 00:00:00          OMER        OMERS    I-2 2027983745.000 2029539000.000 1555255.310
5  2022-07-27 00:00:00          PRIN        AGENT    I-3   72990460.960   74455570.000 1465109.042
6  2022-07-27 00:00:00            SC      SOCIETY    I-7  389659466.400  391147968.200 1488501.805
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73338047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档