python整行列匹配_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更快,这可能非常慢,但是如果你的帧不是太大,那么它们应该运行得足够好.

标签:python,pandas

来源: https://codeday.me/bug/20191008/1874383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值