[英]Pandas: How do you get column labels from one df based on row values and assign these as row values in new df?
I have a dataframe df_1
with the following structure:我有一个具有以下结构的 dataframe df_1
:
df_1:
fruit_group_a fruit_group_b
0 apple banana
1 orange pineapple
Given a string value such as apple
or orange
in df_2
:在df_2
中给定一个字符串值,例如apple
或orange
:
df_2:
fruit
0 apple
1 pineapple
2 orange
3 banana
I want to use the information in dataframe df_1
to assign the corresponding fruit group name in a separate column to get the desired output df_3
as follows:我想利用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
How do I accomplish this?我该如何做到这一点? (I should mention that the dataframes in the real use case has 50+ columns and several hundred rows) (我应该提一下,实际用例中的数据框有 50 多列和几百行)
Any pointers would be much appreciated!任何指针将不胜感激!
You can melt
and merge
:你可以melt
和merge
:
df_3 = df_2.merge(df_1.melt(var_name='fruitgroup', value_name='fruit'))
output: output:
fruit fruitgroup
0 apple fruit_group_a
1 pineapple fruit_group_b
2 orange fruit_group_a
3 banana fruit_group_b
intermediate output of melt
: 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
Use DataFrame.melt
, then DataFrame.merge
with left join - if no match get missing values:使用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
Without left join:没有左连接:
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.