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
df2
从 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
这是个很奇怪的问题,但我不同意。
我有两个数据帧,分别命名为 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
df2
从 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