我有一個資料框 df,我想在其中為 Python 中的多列創建一個映射
資料
id date type
aa q1 2021 aa
bb q1 2022 aa
cc q1 2021 aa
cc q1 2022 aa
cc q1 2023 bb
想要的
id date type source
aa q1 2021 aa 10
bb q1 2022 aa 20
cc q1 2021 aa 10
cc q1 2022 aa 20
cc q1 2023 bb 50
邏輯
當我們遇到 2021 年和型別 aa 時,源值將是 10,當我們遇到 2022 年時,源值為 10,當我們遇到 2023 年時,源值將是 20 和型別 bb,源價值將是 50
正在做
map = pd.DataFrame([
{'id': 'aa', 'date': '2021', 'source': 10},
{'id': 'bb', 'date': '2022', 'source': 20}
])
df['source'] = df1.type.replace(map,regex=True)
任何建議表示贊賞
uj5u.com熱心網友回復:
嘗試merge:
mapper = pd.DataFrame([{'id': 'aa', 'date': '2021', 'source': 10},
{'id': 'aa', 'date': '2022', 'source': 20},
{'id': 'bb', 'date': '2023', 'source': 50},
])
df["year"] = df["date"].str.split().str[1]
output = df.merge(mapper.rename(columns={"date": "year", "id": "type"}), how="left").drop("year", axis=1)
>>> output
id date type source
0 aa q1 2021 aa 10
1 bb q1 2022 aa 20
2 cc q1 2021 aa 10
3 cc q1 2022 aa 20
4 cc q1 2023 bb 50
uj5u.com熱心網友回復:
您可以創建一個字典,將元組映射(type, date)到您想要的值。
根據您的邏輯,這樣的字典可能是:
map = {('aa','2021'): 10, ('aa','2022'):20, ('bb','2023'): 50}
然后,您可以將此字典應用于DataFrame的'type'和'date'列:
df['source'] = df[['type','date']].apply(lambda x: map[x[0], x[1]],axis=1)
輸出:
>>> df
id date type source
0 aa 2021 aa 10
1 bb 2022 aa 20
2 cc 2021 aa 10
3 cc 2022 aa 20
4 cc 2023 bb 50
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357493.html
