微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:pandas:将行值与列名/键的值匹配

问题
“如何将行值与列名匹配,并在pandas中获取该交叉值”

上下文
我们有这样的熊猫df:

df = pd.DataFrame([{'name': 'john', 'john': 1, 'mac': 10}, {'name': 'mac', 'john': 2, 'mac': 20}], columns=["name", "john", "mac"])

看起来像这样:

name | john | mac
john |  1   | 10
mac  |  2   | 20

期望的输出

name | john | mac  | value
john |  1   | 10   | 1
mac  |  2   | 20   | 20

换句话说,列“值”应该取名称相交的相应列中的数字.

所以,如果name ==’john’,那么从’john’列获取
所以,如果name ==’mac’,那么从’mac’列中获取

到目前为止尝试过
一群lambdas(没有成功).

产品规格
Python:3.5.2
熊猫:0.18.1

解决方法:

您可以使用DataFrame.lookup,它接受要使用的行和列标签

In [66]: df
Out[66]: 
   name  john  mac
0  john     1   10
1   mac     2   20

In [67]: df["value"] = df.lookup(df.index, df.name)

In [68]: df
Out[68]: 
   name  john  mac  value
0  john     1   10      1
1   mac     2   20     20

请注意,这会出现重复行标签的问题(通过添加reset_index可以轻松解决).它应该比调用apply更快,这可能非常慢,但是如果你的帧不是太大,那么它们应该运行得足够好.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐