首页 > 解决方案 > 如何通过熊猫中不同的列值重组每日时间序列?

问题描述

我有美国不同县的每日时间序列数据,即 covid 病例每日时间序列,我想对其进行重组/重塑,以便将其与我拥有的其他时间序列数据一起使用。所以我尝试groupby重新组合时间序列的操作,但我得到如下值错误:

ValueError:对象类型 DataFrame 没有名为county_state 的轴

我不确定使用groupby是否正确。任何人都可以建议在熊猫中这样做的可能方法吗?任何想法?

当前尝试

这是gist 上的可重复数据。这是我目前的尝试:

import pandas as pd

df = pd.read_csv("df.csv")
df['date'] = pd.to_datetime(df['date'])
df.groupby('date', 'county_state')['cases', 'deaths'].unstack().reset_index()

但上述尝试不起作用,而是导致ValueError。谁能建议如何做到这一点?

期望的输出

这是我预期的数据框的输出结构,无需使用casesor聚合deaths

    date    fips    cases   deaths  county_state
1/26/2020   4013    1   0   Maricopa_Arizona
1/27/2020   4013    5    0  Maricopa_Arizona
1/28/2020   4013    7    0  Maricopa_Arizona
...         
9/02/202    4013    2333  100     Maricopa_Arizona
1/26/2020   6037    1   0   Los Angeles_California
1/27/2020   6037    15    2  Los Angeles_California
1/28/2020   6037    20    4  Los Angeles_California
...
9/02/202    6037    10001  200     Los Angeles_California

如何实现我上面的预期输出?有什么办法可以在熊猫中做到这一点?

标签: pythonpandasdataframe

解决方案


您需要这样做才能正确导入 CSV,CSV 在每行末尾有一些空格问题,并且您的分隔符是“”。最好将县和州拆分为单独的列,对它们进行排序,然后删除它们:

df = pd.read_csv('df.csv', sep='    ')
df.drop(columns='Unnamed: 5', inplace=True)
df['date'] = pd.to_datetime(df['date'])
df['state'] = df['county_state'].str.split('_').str[1]
df['county'] = df['county_state'].str.split('_').str[0]
df.sort_values(by=['state', 'county', 'date'], inplace=True)
df.drop(columns=['state', 'county'], inplace=True)
print(df)

            date   fips  cases  deaths      county_state
0    2020-01-26   4013      1       0  Maricopa_Arizona
2    2020-01-27   4013      1       0  Maricopa_Arizona
4    2020-01-28   4013      1       0  Maricopa_Arizona
6    2020-01-29   4013      1       0  Maricopa_Arizona
8    2020-01-30   4013      1       0  Maricopa_Arizona
...         ...    ...    ...     ...               ...
7280 2020-08-29  55081    280       2  Monroe_Wisconsin
7325 2020-08-30  55081    281       2  Monroe_Wisconsin
7370 2020-08-31  55081    282       2  Monroe_Wisconsin
7415 2020-09-01  55081    286       2  Monroe_Wisconsin
7460 2020-09-02  55081    290       2  Monroe_Wisconsin

[7461 rows x 5 columns]

推荐阅读