簡體   English   中英

Pandas:如何根據行值從一個 df 獲取列標簽並將其分配為新 df 中的行值?

[英]Pandas: How do you get column labels from one df based on row values and assign these as row values in new df?

我有一個具有以下結構的 dataframe df_1

df_1:

    fruit_group_a   fruit_group_b
0   apple           banana
1   orange          pineapple

df_2中給定一個字符串值,例如appleorange

df_2:

    fruit
0   apple
1   pineapple
2   orange
3   banana

我想利用dataframe df_1中的信息,在單獨的一列中賦值相應的水果組名,得到想要的output df_3 ,如下:

df_3:

    fruit           fruitgroup
0   apple           fruit_group_a
1   pineapple       fruit_group_b
2   orange          fruit_group_a
3   banana          fruit_group_b

我該如何做到這一點? (我應該提一下,實際用例中的數據框有 50 多列和幾百行)

任何指針將不勝感激!

你可以meltmerge

df_3 = df_2.merge(df_1.melt(var_name='fruitgroup', value_name='fruit'))

output:

       fruit     fruitgroup
0      apple  fruit_group_a
1  pineapple  fruit_group_b
2     orange  fruit_group_a
3     banana  fruit_group_b

melt中間體 output :

df_1.melt(var_name='fruit_group', value_name='fruit')

     fruit_group      fruit
0  fruit_group_a      apple
1  fruit_group_a     orange
2  fruit_group_b     banana
3  fruit_group_b  pineapple

使用DataFrame.melt ,然后使用DataFrame.merge與左連接 - 如果沒有匹配項則獲取缺失值:

df = df_2.merge(df_1.melt(var_name='fruitgroup', value_name='fruit'), how='left')
print (df)
       fruit     fruitgroup
0      apple  fruit_group_a
1  pineapple  fruit_group_b
2     orange  fruit_group_a
3     banana  fruit_group_b

print (df_2)
       fruit
0      apple
1  pineapple
2     orange
3       pear

df = df_2.merge(df_1.melt(var_name='fruitgroup', value_name='fruit'), how='left')
print (df)
       fruit     fruitgroup
0      apple  fruit_group_a
1  pineapple  fruit_group_b
2     orange  fruit_group_a
3       pear            NaN

沒有左連接:

df_3 = df_2.merge(df_1.melt(var_name='fruitgroup', value_name='fruit'))
print (df_3)
       fruit     fruitgroup
0      apple  fruit_group_a
1  pineapple  fruit_group_b
2     orange  fruit_group_a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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