Pandas 计算连续时间步中的值数-年
我希望做一些与提出的问题类似的事情,但我的时间差为2年,即2008年、2010年、2012年等报告数据。我只想知道每个站点的开始时间戳和结束时间戳,并计算其间的条目数 输入数据: 年度报告 PWSID 2008-01-01 A. 2008-01-01 B 2008-01-01 C 2008-01-01 D 2010-01-01 A. 2010-01-01 B 2010-01-01 C 2012-01-01 A. 2012-01-01 B 2016-01-01 A.Pandas 计算连续时间步中的值数-年,pandas,date,Pandas,Date,我希望做一些与提出的问题类似的事情,但我的时间差为2年,即2008年、2010年、2012年等报告数据。我只想知道每个站点的开始时间戳和结束时间戳,并计算其间的条目数 输入数据: 年度报告 PWSID 2008-01-01 A. 2008-01-01 B 2008-01-01 C 2008-01-01 D 2010-01-01 A. 2010-01-01 B 2010-01-01 C 2012-01-01 A. 2012-01-01 B 2016-01-01 A. 在您的案例中,数据聚合似乎更简
在您的案例中,数据聚合似乎更简单—按PWSID分组,并在三列中收集计数、最小年份和最大年份,如下所示:
from io import StringIO
import pandas as pd
#recreating your data frame
data1 = """Report_Year PWSID
2008-01-01 A
2008-01-01 B
2008-01-01 C
2008-01-01 D
2010-01-01 A
2010-01-01 B
2010-01-01 C
2012-01-01 A
2012-01-01 B
2016-01-01 A"""
df = pd.read_csv(StringIO(data1), delim_whitespace=True, parse_dates=["Report_Year"])
g = df.groupby("PWSID")["Report_Year"]
sum_df = g.agg(Count= "count").reset_index()
sum_df["Start_date"] = g.min().dt.year.values
sum_df["End_date"] = g.max().dt.year.values
print(sum_df)
输出:
PWSID Count Start_date End_date
0 A 4 2008 2016
1 B 3 2008 2012
2 C 2 2008 2010
3 D 1 2008 2008
附言:在单独的步骤中这样做感觉相当乏味,因此需要更好的解决方案。确实有一个:
...
df = pd.read_csv(StringIO(data1), delim_whitespace=True, parse_dates=["Report_Year"])
sum_df = df.assign(Year=pd.to_datetime(df['Report_Year']).dt.year).groupby('PWSID').agg(
N=('PWSID', 'count'), Start_date=('Year', 'first'), End_date=('Year', 'last')).reset_index()
print(sum_df)
令人惊叹的!这是一种享受:)