首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件地创建基于另一个Dataframe的新数据格式?

有条件地创建基于另一个Dataframe的新数据格式?
EN

Stack Overflow用户
提问于 2017-09-03 10:07:13
回答 1查看 95关注 0票数 0

我有两个这样的数据格式:

代码语言:javascript
复制
dfA=pd.DataFrame([[1,2,3],[4,5,6]])
dfB=pd.DataFrame([[True,False,False],[False,True,False]])

如何根据相同的索引创建一个新的数据格式,

代码语言:javascript
复制
2 ** (dfA+1) only if dfB is true 
2 ** (dfA) only if dfB is false. 

我喜欢实现的是这样一个数据框架:

代码语言:javascript
复制
df_output = pd.DataFrame([[4,4,8],[16,64,64]])

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-03 10:20:49

您可以使用DataFrame.mask:

代码语言:javascript
复制
(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函数:

代码语言:javascript
复制
np.where(dfB, 2 ** (dfA+1), 2 ** (dfA))
Out: 
array([[ 4,  4,  8],
       [16, 64, 64]])

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46022301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档