我有一个如下所示的数据框:
我想按 #PROD 和 #CURRENCY 对数据框进行分组,并将 TP 替换为 Loc 列中 Offshore data 的内容 无需创建两个数据框并将它们连接起来。
最终输出将类似于:
我能够通过将数据帧分成两个(陆上和离岸)然后在 #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
您可以使用这个:
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