gpt4 book ai didi

python - 在 pandas 数据框中,计算某一列中某个条件发生的次数?

转载 作者:行者123 更新时间:2023-12-01 01:06:19 25 4
gpt4 key购买 nike

背景

我有五年的二氧化氮测量数据,采用 csv 文件形式 - 每个位置和年份一个文件。我已将所有文件以相同的格式加载到 pandas 数据框中:

Date    Hour    Location    NO2_Level
0 01/01/2016 00 Street 18
1 01/01/2016 01 Street 39
2 01/01/2016 02 Street 129
3 01/01/2016 03 Street 76
4 01/01/2016 04 Street 40

目标

对于每个数据帧,计数 NO2_Level 大于 150 的次数并输出。

所以我编写了一个循环,从正确的目录创建所有数据帧并适本地清理它们。

问题

无论我尝试过什么,都会产生我在检查时知道的结果是不正确的,例如:- 给定年份每个位置的计数值相同(可能但不太可能)-一年中,当我知道计数应该有任何正数时,每个位置都会返回 0

我尝试过的

我尝试了很多方法来获取每个数据帧的该值,例如将列设为系列:

NO2_Level = pd.Series(df['NO2_Level'])
count = (NO2_Level > 150).sum()'''

使用 pd.count():

count = df[df['NO2_Level'] >= 150].count()

这两种方法最接近我想要的输出

测试示例

data = {'Date': ['01/01/2016','01/02/2016',' 01/03/2016', '01/04/2016', '01/05/2016'], 'Hour': ['00', '01', '02', '03', '04'], 'Location':  ['Street','Street','Street','Street','Street',], 'NO2_Level': [18, 39, 129, 76, 40]}
df = pd.DataFrame(data=d)
NO2_Level = pd.Series(df['NO2_Level'])
count = (NO2_Level > 150).sum()
count

预期输出

因此,我试图让它为以位置、年份、计数(条件)格式制作的每个数据帧输出一行:

Kirkstall Road,2013,47
Haslewood Close,2013,97
...
Jack Lane Hunslet,2015,158

所以上面的例子会产生

Street, 2016, 1

实际每年每个位置都会产生相同的结果,在某些年份(2014 年),在检查时计数似乎根本不起作用:

Kirkstall Road,2013,47
Haslewood Close,2013,47
Tilbury Terrace,2013,47
Corn Exchange,2013,47
Temple Newsam,2014,0
Queen Street Morley,2014,0
Corn Exchange,2014,0
Tilbury Terrace,2014,0
Haslewood Close,2015,43
Tilbury Terrace,2015,43
Corn Exchange,2015,43
Jack Lane Hunslet,2015,43
Norman Rows,2015,43

最佳答案

希望这有帮助。

import pandas as pd

ddict = {
'Date':['2016-01-01','2016-01-01','2016-01-01','2016-01-01','2016-01-01','2016-01-02',],
'Hour':['00','01','02','03','04','02'],
'Location':['Street','Street','Street','Street','Street','Street',],
'N02_Level':[19,39,129,76,40, 151],
}

df = pd.DataFrame(ddict)

# Convert dates to datetime
df['Date'] = pd.to_datetime(df['Date'])

# Make a Year column
df['Year'] = df['Date'].apply(lambda x: x.strftime('%Y'))

# Group by lcoation and year, count by M02_Level > 150
df1 = df[df['N02_Level'] > 150].groupby(['Location','Year']).size().reset_index(name='Count')

# Interate the results
for i in range(len(df1)):
loc = df1['Location'][i]
yr = df1['Year'][i]
cnt = df1['Count'][i]
print(f'{loc},{yr},{cnt}')


### To not use f-strings
for i in range(len(df1)):
print('{loc},{yr},{cnt}'.format(loc=df1['Location'][i], yr=df1['Year'][i], cnt=df1['Count'][i]))

示例数据:

        Date Hour Location  N02_Level
0 2016-01-01 00 Street 19
1 2016-01-01 01 Street 39
2 2016-01-01 02 Street 129
3 2016-01-01 03 Street 76
4 2016-01-01 04 Street 40
5 2016-01-02 02 Street 151

输出:

Street,2016,1

关于python - 在 pandas 数据框中,计算某一列中某个条件发生的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com