Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 计算连续时间步中的值数-年_Pandas_Date - Fatal编程技术网

Pandas 计算连续时间步中的值数-年

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. 在您的案例中,数据聚合似乎更简

我希望做一些与提出的问题类似的事情,但我的时间差为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)

令人惊叹的!这是一种享受:)