如果不诉诸循环遍历数据帧的每一行(这对于大型数据集来说可能非常慢),我如何使用连续两列的计算结果,2*A - B
, 在列中查找值B
并从该新行中提取列中的数据C
并放入列中D
原始行的。
例如,在下面的 DataFrame 中,行2
has 2*A - B
equal 1
。柱子B
in row 0
has a 1
,所以来自列的数据C
in row 0
应该放在列中D
of row 2
.
In [1] import pandas as pd
In [2] a = [3,3,3]
In [3] b = [1,3,5]
In [4] c = [3,4,5]
In [5] df1 = pd.DataFrame({'A': a , 'B': b, 'C':c})
Out[5] print(df1)
A B C
0 3 1 3
1 3 3 4
2 3 5 5
生成的 DataFrame 应如下所示:
A B C D
0 3 1 3 5
1 3 3 4 4
2 3 5 5 3
我假设每个组合只有一个唯一值A
and B
。虽然上面的例子可以通过简单的转置列来完成C
进入专栏D
,我想要一个更通用的解决方案,可以扩展到数据不适合转置的情况。
如果你能保证独特的组合,那么......
mapping = dict(df[['B', 'C']].values)
df['D'] = (2 * df.A - df.B).replace(mapping)
df
A B C D
0 3 1 3 5
1 3 3 4 4
2 3 5 5 3
创建一个映射B
价值观C
价值观。执行运算 (2 * A - B),并使用mapping
较早生成以获得适当的C
value.
如果映射不存在,则不会替换计算值。如果您希望将其替换为NaN
,你可能会使用map
反而:
df['D'] = (2 * df.A - df.B).map(mapping)
df
A B C D
0 3 1 3 5
1 3 3 4 4
2 3 5 5 3
它的工作原理是df.replace
会,但非映射值被替换为NaN
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)