![](/img/trans.png)
[英]How to create a new dataframe column with shifted values from another column?
[英]How do I create a new column in a dataframe using values from another dataframe?
我有兩個數據幀,df_1 和 df_2,其中 df_1 有幾列“代碼”,df_2 有所有這些代碼的定義:
df_1 = pd.DataFrame({
'Age': [42, 35, 64, 53],
'Code 1': [1234, 3452, 9583, 8753],
'Code 2': [3857, np.nan, np.nan, 1234]})
df_2 = pd.DataFrame({
'Code': [3452, 8753, 3857, 1234, 9583],
'Code Def':['a', 'b', 'c', 'd', 'e']})
如何在 df_1 中創建一個新列,其中包含 df_2 中所有代碼的定義,看起來像這樣?
Age Code 1 Code 2 Code def
42 1234 3857 d, c
35 3452 NaN a
64 9583 NaN e
53 8753 1234 b, d
我試過使用merge()
來合並這兩個數據幀,但這不起作用,因為我想加入 df_1 中的多列和 df_2 中的一列。 我還嘗試在 df_1 中創建空列並使用if
語句填充它們,但這變得非常復雜。
謝謝!
您可以先stack
和groupby
+ agg
以形成新列, merge
與原始數據集合並:
s = df_2.set_index(['Code'])['Code Def']
df_1.merge(df_1.set_index('Age')
.stack().map(s)
.groupby(level='Age').agg(','.join)
.rename('Code def'),
left_on='Age', right_index=True
)
output:
Age Code 1 Code 2 Code def
0 42 1234 3857.0 d,c
1 35 3452 NaN a
2 64 9583 NaN e
3 53 8753 1234.0 b,d
這是另一種方法
x= dict(zip(df_2["Code"], df_2['Code Def']))
tmp = df_1[["Code 1","Code 2"]].replace({"Code 1":x,'Code 2':x}).fillna('')
df_1["Code Def"] = tmp["Code 1"]+ " " + tmp["Code 2"]
output
Age Code 1 Code 2 Code Def
0 42 1234 3857.0 d c
1 35 3452 NaN a
2 64 9583 NaN e
3 53 8753 1234.0 b d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.