python - Pandas 融化以复制值并插入新列

标签 python pandas dataframe numpy pandas-groupby

我有两个数据框,如下所示

test_id,status,revenue,cnt_days,age     
1,passed,234.54,3,21          
2,passed,543.21,5,29
11,failed,21.3,4,35
15,failed,2098.21,6,57             
51,passed,232,21,80     
75,failed,123.87,32,43

df1 = pd.read_clipboard(sep=',')


test_id,var_name,score,sign
1,revenue,10,pos
1,cnt_days,5,neg
1,age,15,pos
2,revenue,11,pos
2,cnt_days,3,neg
2,age,25,pos

df2 = pd.read_clipboard(sep=',')

我想做以下事情

a) 从 df1 中获取变量 revenuecnt_daysage 的值,并将其存储在 df2 的新列 下var_value。我们仅复制这 3 个变量,因为它们存在于 df2[var_name]

例如:我们将 df1 列名称作为值存储在 var_name 下的 df2 中。

现在,我想将它们的值存储在每个匹配的 test_id 和相应的列名称var_value 下。

我正在尝试类似下面的内容

out_df = df1.merge(df2,on='test_ids').melt(var_name='var_name')
out_df.drop_duplicates()

但这会导致输出不正确。

我希望我的输出如下所示

enter image description here

最佳答案

因为输出中没有列status,所以通过drop将其移动,然后使用DataFrame.melt并通过DataFrame.merge中的左连接添加到df2 :

out_df = df2.merge(df1.drop('status',1)
                      .melt('test_id', var_name='var_name', value_name='var_value'),
                   how='left')
print (out_df)
   test_id  var_name  score sign  var_value
0        1   revenue     10  pos     234.54
1        1  cnt_days      5  neg       3.00
2        1       age     15  pos      21.00
3        2   revenue     11  pos     543.21
4        2  cnt_days      3  neg       5.00
5        2       age     25  pos      29.00

如果列的顺序很重要:

out_df.insert(2, 'var_value', out_df.pop('var_value'))
print (out_df)
   test_id  var_name  var_value  score sign
0        1   revenue     234.54     10  pos
1        1  cnt_days       3.00      5  neg
2        1       age      21.00     15  pos
3        2   revenue     543.21     11  pos
4        2  cnt_days       5.00      3  neg
5        2       age      29.00     25  pos

关于python - Pandas 融化以复制值并插入新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72285932/

相关文章:

python - Pandas 数据框中重复列的平均值

python - Concat 列名称与第一行的数据,Python 3.6 Dataframe

python - 具有条件的重复行 pandas dataframe python

python - 使用 dictConfig 时命名记录器不写入

python - 为什么在将字符串添加到列表时增强赋值的行为不同

python - Pandas :如何设置标签列的最后一行值?

python - Pandas 系列: calculate means between neighbours

python - 在Python中的DataFrame中映射基于图形/关系的值

python - 如何摆脱从 CSV 文件读取的 pandas DataFrame 中的 "Unnamed: 0"列?

python - "pip install jira"错误