熊猫:按另一个数据框的值添加列

Posted

技术标签:

【中文标题】熊猫:按另一个数据框的值添加列【英文标题】:Pandas: Add columns by values of another dataframe 【发布时间】:2022-01-23 21:08:52 【问题描述】:

这是一个很奇怪的问题,但我不同意。

我确实有两个数据框,名为 df1 和 df2。有结构:

df1:
Eval    Lang    Average     Model
df2:
Eval    Lang    Mean

模型列正好有六个不同的可用值,并且对于每种可能的组合(Eval、Lang),恰好存在这六个中的一个。我希望这六个值成为 df2 中的六个新列,在该位置都具有 df1['Average'] 的值。

所以得到的结构是:

Eval Lang Mean ModelAverage1 ModelAverage2 ModelAverage3 ModelAverage4 ModelAverage5 ModelAverage6

有没有一种简单而聪明的方法来做到这一点? 我不确定我在这里所做的是否是普通 panda 命令应该支持的。

==== 为了形象化,这里有一个例子: df1.csv:

Eval,Lang,Average,Model
F1,German,0.62,flairmulti
F1,German,0.7363,flairsingle
F1,German,0.72,bertmulti
F1,German,0.7527,bertsingle
F1,German,0.78,robertamulti
F1,German,0.7349,robertasingle

df2.csv

Eval,Lang,Mean
F1,German,0.54
Precision,German,0.54
Recall,German,0.53

结果会是这样的: 总计.csv

Eval,Lang,Mean,flairmulti,flairsingle,bertmulti,bertsingle,robertamulti,robertasingle
F1,German,0.54,0.62,0.7363,0.72,0.7527,0.78,0.7349
Precision,German,0.54,...
Recall,German,0.53,...

当然,Lang 和 Eval 也有其他值,但实际上,它们中的每一对都有我上面提到的“Model”这六个命名值。

【问题讨论】:

能否请您展示两个数据帧的小样本,并在此基础上展示您预期输出的小样本?这将使您的问题更容易可视化。谢谢你:) 给我五分钟 :) 完成。我希望这会有所帮助。我的问题实际上描述起来很奇怪。 :) 为任何至少了解我的愿望的人感到高兴 这不是一个很奇怪的要求。我明白了,我会看看我能做什么;) 【参考方案1】:

您可以pivotdf2 获取Model 列中的值作为新列,并将Average 列中的值作为新值:

df3 = df2.merge(df1.pivot(index=['Eval', 'Lang'], columns='Model', values='Average').reset_index())

输出:

>>> df3
  Eval    Lang  Mean  bertmulti  bertsingle  flairmulti  flairsingle  robertamulti  robertasingle
0   F1  German  0.54       0.72      0.7527        0.62       0.7363          0.78         0.7349

【讨论】:

你又一次救了我,非常感谢!枢轴命令是我正在寻找的最后一个缺失的部分 是的。它真的很强大,但有时学习如何使用很棘手;)

以上是关于熊猫:按另一个数据框的值添加列的主要内容,如果未能解决你的问题,请参考以下文章

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

如何按列绘制数据框的多个字典?蟒蛇熊猫

将列标题添加到熊猫数据框..但是即使标题是相同的维度,NAN 也是所有数据

根据熊猫中多列的条件(最大值)替换列中的值

用值填充列(熊猫)

如何将多索引列转换为熊猫数据框的单索引列?