簡體   English   中英

如何為熊貓groupby列表填寫零日期?

[英]How do I fill in missing dates with zeros for a pandas groupby list?

我希望記錄交易的每日記錄,並記錄發生0筆交易的天數。

這是我的初始數據框:

df.head()
tr_timestamp  text      location
2016-01-01    cookies   TX
2016-01-01    pizza     TX
2016-01-04    apples    TX
2016-01-08    bread     TX

當我每天分組時,會得到以下信息:

df_by_day = df['tr_timestamp'].groupby(df.tr_timestamp).count()
df_by_day

tr_timestamp
2016-01-01  2
2016-01-04  1
2016-01-08  1

我正在尋找使用Python / Pandas的方式,其中填充沒有交易的日期,以便獲得以下輸出:

df_by_day_filled

tr_timestamp
2016-01-01  2
2016-01-02  0
2016-01-03  0
2016-01-04  1
2016-01-05  0
2016-01-06  0
2016-01-07  0
2016-01-08  1

我已經嘗試了以下答案,但並沒有給出我需要返回的輸出:

熊貓groupby為零值

用Groupby中的重復日期填充DataFrame中的缺失日期

謝謝。

您也可以嘗試:

df_by_day.asfreq('D', fill_value=0)

輸出:

tr_timestamp
2016-01-01    2
2016-01-02    0
2016-01-03    0
2016-01-04    1
2016-01-05    0
2016-01-06    0
2016-01-07    0
2016-01-08    1
Freq: D, Name: tr_timestamp, dtype: int64

這是一個resample操作:

df.set_index(pd.to_datetime(df.pop('tr_timestamp'))).resample('D')['text'].count()

tr_timestamp
2016-01-01    2
2016-01-02    0
2016-01-03    0
2016-01-04    1
2016-01-05    0
2016-01-06    0
2016-01-07    0
2016-01-08    1
Freq: D, Name: text, dtype: int64

如果“ tr_timestamp”不是日期時間,則pd.to_datetime調用可確保此方法有效。 如果是,則解決方案簡化為

df.dtypes

tr_timestamp    datetime64[ns]
text                    object
location                object
dtype: object

df.set_index('tr_timestamp').resample('D')['text'].count()

tr_timestamp
2016-01-01    2
2016-01-02    0
2016-01-03    0
2016-01-04    1
2016-01-05    0
2016-01-06    0
2016-01-07    0
2016-01-08    1
Freq: D, Name: text, dtype: int64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM