首页 > 解决方案 > 这段代码有条件地计算 Pandas 数据框列有什么问题?

问题描述

我有以下数据:

数据:

ObjectID,Date,Price,Vol,Mx
101,2017-01-01,,145,203
101,2017-01-02,,155,163
101,2017-01-03,67.0,140,234
101,2017-01-04,78.0,130,182
101,2017-01-05,58.0,178,202
101,2017-01-06,53.0,134,204
101,2017-01-07,52.0,134,183
101,2017-01-08,62.0,148,176
101,2017-01-09,42.0,152,193
101,2017-01-10,80.0,137,150

我想添加一个名为 CheckCount 的新列,如果它们大于 150,则计算 Vol 和 Mx 列中的值。我编写了以下代码:

代码:

import pandas as pd

Observations = pd.read_csv("C:\\Users\\Observations.csv", parse_dates=['Date'], index_col=['ObjectID', 'Date'])

Observations['CheckCount'] = (Observations[['Vol', 'Mx']]>150).count(axis=1)

print(Observations)

但是,不幸的是,它正在计算每个值(结果始终为 2),而不仅仅是值 > 150 的地方 - 我的代码有什么问题?

当前结果:

ObjectID,Date,Price,Vol,Mx,CheckCount
101,2017-01-01,,145,203,2
101,2017-01-02,,155,163,2
101,2017-01-03,67.0,140,234,2
101,2017-01-04,78.0,130,182,2
101,2017-01-05,58.0,178,202,2
101,2017-01-06,53.0,134,204,2
101,2017-01-07,52.0,134,183,2
101,2017-01-08,62.0,148,176,2
101,2017-01-09,42.0,152,193,2
101,2017-01-10,80.0,137,150,2

期望的结果:

ObjectID,Date,Price,Vol,Mx,CheckCount
101,2017-01-01,,145,203,1
101,2017-01-02,,155,163,2
101,2017-01-03,67.0,140,234,1
101,2017-01-04,78.0,130,182,1
101,2017-01-05,58.0,178,202,2
101,2017-01-06,53.0,134,204,1
101,2017-01-07,52.0,134,183,1
101,2017-01-08,62.0,148,176,1
101,2017-01-09,42.0,152,193,2
101,2017-01-10,80.0,137,150,0

标签: pythonpandas

解决方案


您是否在寻找:

df['CheckCount'] = df[['Vol','Mx']].gt(150).sum(1)

输出:

   ObjectID       Date  Price  Vol   Mx  CheckCount
0       101 2017-01-01    NaN  145  203           1
1       101 2017-01-02    NaN  155  163           2
2       101 2017-01-03   67.0  140  234           1
3       101 2017-01-04   78.0  130  182           1
4       101 2017-01-05   58.0  178  202           2
5       101 2017-01-06   53.0  134  204           1
6       101 2017-01-07   52.0  134  183           1
7       101 2017-01-08   62.0  148  176           1
8       101 2017-01-09   42.0  152  193           2
9       101 2017-01-10   80.0  137  150           0

推荐阅读