问题
“如何将行值与列名匹配,并在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