首页 > 解决方案 > Pandas/Numpy 将列名的列映射到值

问题描述

我有一个熊猫数据框,其中有一列的名称来自另一个熊猫数据框。例如:

a
var1
var3
var2
...

然后是另一个看起来像这样的数据框:

var1   var2   var3   ...
5      8      9      ...
9      3      2      ...
...

我想要的结果是一个 numpy 数组,其中行对应于第一个的行,而列是指根据第一个中的列名从第二个开始的时间序列。

在这个例子中,我希望结果是:

5  9  ...
9  2  ...
8  3  ...
...

我知道我可以这样做 .loc 像这样:

a.loc[a == "var1","new_col"] = df2["var1"]
b.loc[a == "var2","new_col"] = df2["var2"]
b.loc[a == "var3","new_col"] = df2["var3"]
...

或类似的东西。我知道由于需要扩展,开箱即用是行不通的,但即使它确实如此,或者如果 np.where 能够以这种方式工作,我想避免这种情况,因为这里有很多变量,我试图看看我是否可以对此采取地图风格的方法。提前致谢。

标签: pythonpandasdataframenumpytransformation

解决方案


假设df1包含行的顺序并且df2是数据,您可以执行以下操作:

>>> df2[df1["a"].tolist()].T
      0  1
var1  5  9
var3  9  2
var2  8  3

推荐阅读