pandas 如何计算数据框中每一年的值

jbose2ul  于 2022-12-10  发布在  其他
关注(0)|答案(3)|浏览(123)

我有一个数据框架,上面有每天的降水量,我想做一个重新采样,这样数据就不是每天,而是每年收集,每年都有一个列,包含降雨次数超过某个值的次数。
| 日期|降水量|
| - -|- -|
| 2000年1月1日|一个|
| 2000年1月3日|六个|
| 2000年1月3日|五个|
| 2001年1月1日|三个|
| 2001年1月2日|一个|
| 2001年1月3日|第0页|
| 2002年1月1日|10个|
| 2002年1月2日|八个|
| 2002年1月3日|十二|
我想要的是计算每年有多少次降水〉2
| 日期|计数|
| - -|- -|
| 二○ ○ ○年|2个|
| 二OO一年|一个|
| 二OO二年|三个|
我尝试使用resample(),但没有结果

tquggr8v

tquggr8v1#

您可以使用以下代码:

# convert "Precipitation" and "date" values to proper types
df['Precipitation'] = df['Precipitation'].astype(int)
df["date"] = pd.to_datetime(df["date"])

# find rows that have "Precipitation" > 2
df['Count']= df.apply(lambda x: x["Precipitation"] > 2, axis=1)

# group df by year and drop the "Precipitation" column
df.groupby(df['date'].dt.year).sum().drop(columns=['Precipitation'])
omjgkv6w

omjgkv6w2#

@Tatthew你也可以用queryGroupby.size来做这个。

import pandas as pd
df = pd.DataFrame({'Date': ['2000-01-01', '2000-01-03',
                            '2000-01-03', '2001-01-01',
                            '2001-01-02', '2001-01-03',
                            '2002-01-01', '2002-01-02',
                            '2002-01-03'],
                   'Precipitation': [1, 6, 5, 3, 1, 0,
                                     10, 8, 12]})
df = df.astype({'Date': datetime64})
above_threshold = df.query('Precipitation > 2')
above_threshold.groupby(above_threshold.Date.dt.year).size()
f0brbegy

f0brbegy3#

@Tatthew你可以用GroupBy.apply来做这个:

import pandas as pd
df = pd.DataFrame({'Date': ['2000-01-01', '2000-01-03',
                            '2000-01-03', '2001-01-01',
                            '2001-01-02', '2001-01-03',
                            '2002-01-01', '2002-01-02',
                            '2002-01-03'],
                   'Precipitation': [1, 6, 5, 3, 1, 0,
                                     10, 8, 12]})
df = df.astype({'Date': datetime64})
df.groupby(df.Date.dt.year).apply(lambda df: df.Precipitation[df.Precipitation > 2].count())

相关问题