【问题标题】:pandas numpy mask filter not working as expectedpandas numpy 掩码过滤器未按预期工作
【发布时间】:2022-01-07 05:21:03
【问题描述】:

我有一个数据框,你可以通过运行这段代码来获得它:

import numpy as np
import pandas as pd
from io import StringIO

df4s = """
   LowerAge    age    1       2      3      4 
0  2            3     o.234   o.234  o.234  o.234
1  3            4     o.234   o.234  o.234  o.234
2  4            2     o.234   o.234  o.234  o.234      
3  5            3     o.234   o.234  o.234  o.234         
"""
df4 = pd.read_csv(StringIO(df4s.strip()), sep='\s+')

df4

输出是:

  LowerAge  age   1       2       3       4
0   2       3     o.234   o.234   o.234   o.234
1   3       4     o.234   o.234   o.234   o.234
2   4       2     o.234   o.234   o.234   o.234
3   5       3     o.234   o.234   o.234   o.234

现在逻辑是这样的:对于每一行,如果LowerAge-1

第一行LowerAge-1等于1且小于age,则'1'列的值(因为LowerAge-1等于1)将等于1,

第二行LowerAge-1等于2且小于age,则'2'列的值为1。

理想的输出应该是:

  LowerAge  age   1      2       3       4
0   2       3     1      o.234   o.234   o.234
1   3       4     o.234  1       o.234   o.234
2   4       2     o.234  o.234   o.234   o.234
3   5       3     o.234  o.234   o.234   o.234

我的代码是:

index_age = df4['LowerAge']-1

mask=index_age < df4['age']

df4.loc[mask, index_age.astype(str)]=1

我的输出:

 LowerAge  age  1      2         3      4
0       2   3   1      1         1      1
1       3   4   1      1         1      1
2       4   2   o.234  o.234     o.234  o.234
3       5   3   o.234  o.234     o.234  o.234

如果我想坚持使用口罩,我该怎么办,有朋友可以帮忙吗?

【问题讨论】:

  • 检查它是o还是0

标签: python pandas dataframe numpy


【解决方案1】:

如果你的情况可以切片,那么 crosstabupdate

s = (df.LowerAge-1)
s = s[s<df.age]
df.update(pd.crosstab(s.index,s.astype(str)).where(lambda x : x==1))
df
Out[454]: 
   LowerAge  age      1      2      3      4
0         2    3    1.0  o.234  o.234  o.234
1         3    4  o.234    1.0  o.234  o.234
2         4    2  o.234  o.234  o.234  o.234
3         5    3  o.234  o.234  o.234  o.234

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多