首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在另外两个带有条件的DataFrame基础上创建0/1 DataFrame?

如何在另外两个带有条件的DataFrame基础上创建0/1 DataFrame?
EN

Stack Overflow用户
提问于 2021-12-01 10:10:23
回答 1查看 21关注 0票数 0

我试图创建一个基于另外两个DataFrame df3的DataFrames df1df2。如果df1中的值大于或等于df2中的值,那么我希望在df3中赋值1,否则给0赋值。

这将是一个示例数据,以供说明:

代码语言:javascript
复制
df1
    Date        01K  02K  03K   04K
0   2021-01-01  NaN  3.5  4.2   NaN
1   2021-01-02  2.3  0.1  5.2   2.6
2   2021-01-03  0.3  NaN  2.5   8.2
3   2021-01-04  0.4  NaN  3.0   4.2

df2
    Date        01K  02K  03K   04K
0   2021-01-01  NaN  NaN  NaN   NaN
1   2021-01-02  2.5  0.6  5.8   2.3
2   2021-01-03  0.2  NaN  2.5   8.1
3   2021-01-04  0.3  NaN  2.8   4.2

df3
    Date        01K  02K  03K   04K
0   2021-01-01  0    0    0     0
1   2021-01-02  0    0    0     1
2   2021-01-03  1    0    1     1
3   2021-01-04  1    0    1     1

可复制性:

代码语言:javascript
复制
df1 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
    '01K':['NaN', 2.3, 0.3, 0.4], 
    '02K':[3.5, 0.1, 'NaN', 'NaN'], 
    '03K':[4.2, 5.2, 2.5, 3.0], 
    '04K':['NaN', 2.6, 8.2, 4.2]}) 
df1 = df1.replace('NaN',np.nan)

df2 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
    '01K':['NaN', 2.5, 0.2, 0.3], 
    '02K':['NaN', 0.6, 'NaN', 'NaN'], 
    '03K':['NaN', 5.8, 2.5, 2.8], 
    '04K':['NaN', 2.3, 8.1, 4.2]}) 
df2 = df2.replace('NaN',np.nan)

我试着用np.where()来做这件事,但是我得到了一个数组作为输出。

代码语言:javascript
复制
df3 = np.where(df1>=df2, 1, 0)

array([[1, 0, 0, 0, 0],
       [1, 0, 0, 0, 1],
       [1, 1, 0, 1, 1],
       [1, 1, 0, 1, 1]])

是否有一种有效的方法来为大型数据集创建具有与其他DataFrames相同结构的DataFrames?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-01 10:11:55

在这两种情况下都将Date转换为DatetimeIndex,因此与将True, Falses映射为1, 0的整数转换为整数相比是可能的。

代码语言:javascript
复制
df1 = df1.set_index('Date')
df2 = df2.set_index('Date')

df3 = (df1>=df2).astype(int)

如果需要,则使用1使用-1

代码语言:javascript
复制
df3 = (df1>=df2).astype(int).mul(-1)

df3 = pd.DataFrame(np.where(df1>=df2, -1, 0), 
                  index=df1.index, 
                  columns=df1.columns)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70182335

复制
相关文章

相似问题

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