英文:
I Have one for condition, and can't do if statement to count cell condition
问题
我试图制定这个条件来计算小于300秒(5分钟)的值(单元格)出现了多少次,但它返回了一个错误。条件是关于下面的一个DF,我从我的csv中提取的:
df =
0
0 NaN
1 79.0
2 140.0
3 131.0
4 72.0
... ...
16341 349.0
16342 795.0
16343 787.0
16344 410.0
16345 1221.0
我尝试这样做:
for key, value in data_df.items() :
df = data_df[key].fillna(0, inplace=False).astype(int)
if key <= 300 :
df_count = value.count( value.values() <= 300)
display(df_count)
但错误信息说:
TypeError: 'numpy.ndarray' object is not callable
我该如何解决我的 IF
语句以执行 Display()
代码?
编辑以获得更好的结果
我应该在这之前询问,但我以为解决办法类似于 IF
语句。
我需要将其制定为范围,条件是计算每个范围内的每个单元格,大约是5到5分钟,直到我完成一个小时。所以条件大致是:
- 0到300(5分钟)
- 300到600(5到10分钟)
- 600到900(10到15分钟)
直到我完成一个小时。我尝试过:
df_count300to600 = data_df[key].fillna(0).le( key > 300 && key< 600 )
在这一点上我该如何解决?
英文:
I'm trying to do this condition to count how many times (cells) have values less than 300 seconds (5 minutes) but it returns me an error, the condition is about a DF below, that I pull from my csv:
df =
0
0 NaN
1 79.0
2 140.0
3 131.0
4 72.0
... ...
16341 349.0
16342 795.0
16343 787.0
16344 410.0
16345 1221.0
I try this way:
for key, value in data_df.items() :
df = data_df[key].fillna(0, inplace=False).astype(int)
if key <= 300 :
df_count = value.count( value.values() <= 300)
display(df_count)
but the error message says:
> TypeError: 'numpy.ndarray' object is not callable
How can I solve my IF
statement to execute the Display()
code?
EDITED FOR BETTER RESULTS
I Should asked this before but i thought that the sollution would be alike IF
statement.
I need to make it in range, the condition is to count every cell in a range about 5 to 5 minutes, untill I get 1 hour complete, So the conditions is about:
- 0 to 300 (5minutes)
- 300 to 600 (5 to 10 minutes)
- 600 to 900 (10 minutes to 15 minutes)
.
.
.
until i get one hour complete, I tryed:
df_count300to600 = data_df[key].fillna(0).le( key > 300 && key< 600 )
How can I solve at this point?
答案1
得分: 0
理解了,你只需要这些代码的翻译:
count = df[0].fillna(0).le(300).sum()
pd.cut(df[0].fillna(0), bins=[0, 300, 600, 900, 1200, 1500]).value_counts()
df[0].fillna(0).floordiv(300).add(1).mul(300).value_counts()
英文:
IIUC, you just need:
count = df[0].fillna(0).le(300).sum()
Example output: 5
How it works
df[0].fillna(0).le(300)
creates a boolean Series, sum
counts the True
:
0 df['0'].fillna(0).le(300)
0 NaN True
1 79.0 True
2 140.0 True
3 131.0 True
4 72.0 True
16341 349.0 False
16342 795.0 False
16343 787.0 False
16344 410.0 False
16345 1221.0 False
edited question:
You might need to use cut
:
pd.cut(df[0].fillna(0), bins=[0, 300, 600, 900, 1200, 1500]).value_counts()
Output:
(0, 300] 4
(300, 600] 2
(600, 900] 2
(1200, 1500] 1
(900, 1200] 0
Name: 0, dtype: int64
Or with arithmetics:
df[0].fillna(0).floordiv(300).add(1).mul(300).value_counts()
Output:
300.0 5
600.0 2
900.0 2
1500.0 1
Name: 0, dtype: int64
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论