簡體   English   中英

如何使用另一個 dataframe 中的值在 dataframe 中創建新列?

[英]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語句填充它們,但這變得非常復雜。

謝謝!

您可以先stackgroupby + 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM