python - 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 能够以这种方式工作,我想避免这种情况,因为这里有很多变量,我试图看看我是否可以对此采取地图风格的方法。提前致谢。
解决方案
假设df1
包含行的顺序并且df2
是数据,您可以执行以下操作:
>>> df2[df1["a"].tolist()].T
0 1
var1 5 9
var3 9 2
var2 8 3
推荐阅读
- python - 有没有办法在 Tkinter 画布上获取对象的状态?
- python - Python(json.load)将值设置为缺少转义字符的字符串
- ios - 如何重新创建苹果证书的私钥
- python - 如何以交互方式(例如使用终端)干预 for 循环
- scala - 需要类类型,但在编码器中找到 T
- java - 一个小的睡眠会改变应用程序的行为(多线程)
- c# - IText 7不呈现引导程序的输入前置/附加内联
- javascript - 如何为 SweetAlert 承诺结果添加事件侦听器?
- r - 如何将此日期格式转换为 lubridate 接受的格式?
- java - 我们需要捕获 AsyncTask 的返回值吗?