基于另一个数据帧有条件地创建新的数据帧?

2022-07-06 11:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个这样的数据帧:

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]])

谢谢!你知道吗


Tags: 数据falsetrueonlydataframedfoutputifispddfadfb
1条回答
网友
1楼 ·

你可以用数据帧掩码地址:

(2 ** dfA).mask(dfB, 2 ** (dfA+1))
Out: 
    0   1   2
0   4   4   8
1  16  64  64

这将检查dfB,如果为True,则从原始数据帧((2 ** dfA))获取值,如果为false,则从其他数据帧(2 ** (dfA+1))获取值。你知道吗

这类似于numpy的where函数:

np.where(dfB, 2 ** (dfA+1), 2 ** (dfA))
Out: 
array([[ 4,  4,  8],
       [16, 64, 64]])

但是,它会丢失索引和列,因此您可能需要将结果包装到数据帧构造函数中:

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  64