繁体   English   中英

如何使用每行的值作为比较 object 从整个 DataFrame 中获取满足条件的行数?

[英]How to use each row's value as compare object to get the count of rows satisfying a condition from whole DataFrame?

    date    data1
0   2012/1/1    100
1   2012/1/2    109
2   2012/1/3    108
3   2012/1/4    120
4   2012/1/5    80
5   2012/1/6    130
6   2012/1/7    100
7   2012/1/8    140

给定上面的 dataframe,我想获取data1值在每行的data1字段的±10 之间的行数,以及计入每一行的 append,这样:

    date    data    Count
0   2012/1/1    100.0   4.0
1   2012/1/2    109.0   4.0
2   2012/1/3    108.0   4.0
3   2012/1/4    120.0   2.0
4   2012/1/5    80.0    1.0
5   2012/1/6    130.0   3.0
6   2012/1/7    100.0   4.0
7   2012/1/8    140.0   2.0

由于每一行的字段都是规则的比较 object,我使用iterrows ,虽然我知道这并不优雅:

result = pd.DataFrame(index=df.index)

for i,r in df.iterrows():
    high=r['data']+10
    low=r['data1']-10
    df2=df.loc[(df['data']<=r['data']+10)&(df['data']>=r['data']-10)]
    result.loc[i,'date']=r['date']
    result.loc[i,'data']=r['data']
    result.loc[i,'count']=df2.shape[0]  
  
result

还有更多 Pandas 风格的方法吗? 感谢您的任何帮助!

使用 numpy 广播 boolean 掩码和计数True s 使用sum

arr = df['data'].to_numpy()

df['count'] = ((arr[:, None] <= arr+10)&(arr[:, None] >= arr-10)).sum(axis=1)
print (df)
       date  data  count
0  2012/1/1   100      4
1  2012/1/2   109      4
2  2012/1/3   108      4
3  2012/1/4   120      2
4  2012/1/5    80      1
5  2012/1/6   130      3
6  2012/1/7   100      4
7  2012/1/8   140      2

暂无
暂无

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

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