避免在 Pandas 中合并

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

我有一个如下所示的数据框:

enter image description here

我想按 #PROD#CURRENCY 对数据框进行分组,并将 TP 替换为 Loc 列中 Offshore data 的内容 无需创建两个数据框并将它们连接起来。

最终输出将类似于:

enter image description here

我能够通过将数据帧分成两个(陆上和离岸)然后在 #PROD 和 #CURRENCY 上创建联接来创建输出。但是,我想知道是否有更干净的方法来做到这一点?

数据框的代码是:

import pandas as pd
data=[['Offshore','NY','A','USD','ABC_USD'],['Onshore','BH','A','USD',''],                  ['Onshore','AE','A','USD',''],\
     ['Offshore','NY','A','GBP','GBP_ABC'],['Onshore','BH','A','GBP',''],                           ['Onshore','AE','A','GBP',''],\
     ['Onshore','BH','A','EUR',''],['Onshore','AE','A','EUR','']]

df = pd.DataFrame(data, columns=['Loc', 'Country','#PROD','#CURRENCY','TP'])
df
python pandas merge
1个回答
0
投票

您可以使用这个:

df["TP"] = (
    df.sort_values("Loc")  # ensure Offshore comes before Onshore
    .replace("", np.nan)  # replace "" with nan so it can be forward filled
    .groupby(["#PROD", "#CURRENCY"])["TP"]
    .ffill()
    .fillna("")
)
        Loc Country #PROD #CURRENCY       TP
0  Offshore      NY     A       USD  ABC_USD
1   Onshore      BH     A       USD  ABC_USD
2   Onshore      AE     A       USD  ABC_USD
3  Offshore      NY     A       GBP  GBP_ABC
4   Onshore      BH     A       GBP  GBP_ABC
5   Onshore      AE     A       GBP  GBP_ABC
6   Onshore      BH     A       EUR         
7   Onshore      AE     A       EUR         
© www.soinside.com 2019 - 2024. All rights reserved.