繁体   English   中英

pandas numpy 面罩过滤器未按预期工作

[英]pandas numpy mask filter not working as expected

我有一个 dataframe,您可以通过运行以下代码来获得它:

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 < age,则df4[str(LowerAge-1)] =1,否则保持不变,例如:

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

在第二行,LowerAge-1 等于 2 并且小于 age,那么列 '2' 的值将等于 1。

理想的 output 应该是:

  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

我的 output:

 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

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

如果你的情况你可以做切片然后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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM