![](/img/trans.png)
[英]How to query Pandas df based on row values and column header with Python
[英]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
中給定一個字符串值,例如apple
或orange
:
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 多列和幾百行)
任何指針將不勝感激!
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.