首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据Python中的多个间隔条件明智地计算值行

根据Python中的多个间隔条件明智地计算值行
EN

Stack Overflow用户
提问于 2021-11-05 09:05:17
回答 2查看 58关注 0票数 1

给定数据df,如下所示:

代码语言:javascript
运行
复制
df = pd.DataFrame([{'date': '2021-10-1',
  'pct1': -0.039473959,
  'pct2': -0.039473959,
  'pct3': -0.032095057,
  'pct4': -0.106310578,
  'pct5': -0.039473959},
 {'date': '2021-10-2',
  'pct1': 0.222111128,
  'pct2': 0.042484279,
  'pct3': 0.108269001,
  'pct4': -0.050188884,
  'pct5': 0.042484279},
 {'date': '2021-10-3',
  'pct1': -0.0131719,
  'pct2': 0.051357438,
  'pct3': 0.051357438,
  'pct4': 0.130772264,
  'pct5': 0.051357438},
 {'date': '2021-10-4',
  'pct1': 0.092982799,
  'pct2': 0.092982799,
  'pct3': 0.092982799,
  'pct4': 0.147102302,
  'pct5': 0.092982799}])

退出:

代码语言:javascript
运行
复制
        date      pct1      pct2      pct3      pct4      pct5
0  2021-10-1 -0.039474 -0.039474 -0.032095 -0.106311 -0.039474
1  2021-10-2  0.222111  0.042484  0.108269 -0.050189  0.042484
2  2021-10-3 -0.013172  0.051357  0.051357  0.130772  0.051357
3  2021-10-4  0.092983  0.092983  0.092983  0.147102  0.092983

我希望根据以下逻辑明智地计算值的数量:

  1. >H 112如果值位于x > 0.02,则计数到increase列;H 215G 216

预期结果如下:

代码语言:javascript
运行
复制
        date  decrease  keep_same  increase
0  2021-10-1         5          0         0
1  2021-10-2         1          0         4
2  2021-10-3         0          1         4
3  2021-10-4         0          0         5

我的想法如下,在第一步中,根据上述条件将df的值替换为0、-1和1,然后明智地计算它们的行数:

代码语言:javascript
运行
复制
pct_df = df.filter(regex='^pct')

conds = [pct_df.values > 0.02, -0.02 <= pct_df.values <= 0.02, pct_df.values < -0.02]
choices = [1, 0, -1]

pd.DataFrame(np.select(conds, choices, default=np.NaN),
             index=pct_df.index,
             columns=pct_df.columns)

我怎么能做到这一点?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-05 09:15:18

因为条件是必需的,必须由&将其链接到值之间,然后定义新的列名,循环中由sum进行有符号计数,因为新的DataFrame只在date列上过滤:

代码语言:javascript
运行
复制
pct_df = df.filter(regex='^pct')

conds = [pct_df.values > 0.02, 
         (pct_df.values >= -0.02) & (pct_df.values <= 0.02), 
         pct_df.values < -0.02]
cols = ['decrease', 'keep_same', 'increase']

df1 = df[['date']].copy()
for c, m in zip(cols, conds):
    df1[c] = m.sum(axis=1)
print (df1)
        date  decrease  keep_same  increase
0  2021-10-1         0          0         5
1  2021-10-2         4          0         1
2  2021-10-3         4          1         0
3  2021-10-4         5          0         0
票数 2
EN

Stack Overflow用户

发布于 2021-11-05 09:11:49

如果您对一个一个地分配这些没有问题,您可以简单地使用

代码语言:javascript
运行
复制
df['decrease'] = (pct_df.values < -0.02).sum(axis=1)
df['keep_same'] = (-0.02 <= pct_df.values <= 0.02).sum(axis=1)
df['increase'] = (pct_df.values > 0.02).sum(axis=1)

您已经创建了布尔值。超过轴1的求和使您的逐行计算完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69850781

复制
相关文章

相似问题

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