我有两个这样的数据格式:
dfA=pd.DataFrame([[1,2,3],[4,5,6]])
dfB=pd.DataFrame([[True,False,False],[False,True,False]])如何根据相同的索引创建一个新的数据格式,
2 ** (dfA+1) only if dfB is true
2 ** (dfA) only if dfB is false. 我喜欢实现的是这样一个数据框架:
df_output = pd.DataFrame([[4,4,8],[16,64,64]])谢谢!
发布于 2017-09-03 10:20:49
您可以使用DataFrame.mask:
(2 ** dfA).mask(dfB, 2 ** (dfA+1))
Out:
0 1 2
0 4 4 8
1 16 64 64这将检查dfB,如果为真,则从原始DataFrame ((2 ** dfA))取值,如果为false,则从另一个(2 ** (dfA+1))取值。
这类似于numpy的where函数:
np.where(dfB, 2 ** (dfA+1), 2 ** (dfA))
Out:
array([[ 4, 4, 8],
[16, 64, 64]])但是,它会丢失索引和列,因此可能需要将结果包装在DataFrame构造函数中:
pd.DataFrame(np.where(dfB, 2 ** (dfA+1), 2 ** (dfA)), dfA.index, dfA.columns)
Out:
0 1 2
0 4 4 8
1 16 64 64https://stackoverflow.com/questions/46022301
复制相似问题