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

Pandas: Add columns by values of another dataframe

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

我有两个数据帧,分别命名为 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

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

==== 为了形象化,这里有一个例子: 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

结果会是这样的: total.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”命名值。

您可以 pivot df2Model 列中获取值作为新列,并从 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