簡體   English   中英

熊貓DataFrame和DateTimeIndex

[英]Pandas DataFrame and DateTimeIndex

我想按時間對行進行分組,我嘗試了以下方法

import pandas as pd

df = pd.DataFrame({'time': ["2001-01-01 10:20:30,000", 
                            "2001-01-01 10:20:31,000",
                            "2001-01-02 5:00:00,000"],
                    'val': [1, 2, 3]})

t = pd.DatetimeIndex(df.time)
df = df.groupby([t.day, t.hour, t.minute]).count()

結果數據框是

                   time val
    time time time      
       1   10   20    2   2
       2    5    0    1   1

我期望的輸出(或類似的東西):

           time   count             
     1  1-10-20       2
     2    2-5-0       1

我要繪制的圖: X軸表示分鍾, Y軸表示count ,按天+小時滴答(不只是分鍾)。

問題:

1)為什么索引由3個time列組成,我如何只有一個包含1-10-202-5-0這樣的元素的索引列?

2)最好的做法是只有一列具有count()的結果,而不是兩列timeval

2)如何以天和小時為單位繪制此數據(按天/小時/分鍾分組)?

要回答第一個問題,是因為您要按三個單獨的系列分組。 如果您真的希望將它們組合在一起,請按strftime分組:

df.time = pd.to_datetime(df.time)

df.groupby([df.time.dt.strftime('%d-%H-%M')]).val.count()

time
01-10-20    2
02-05-00    1
Name: val, dtype: int64

以上還回答了您的第二個問題。 不用計算DataFrame,而是計算一個序列,即val系列。


最后,要進行繪圖,您可以使用pandas的內置plot功能。 我正在創建一個更復雜的示例來演示您想要的報價:

r = pd.date_range(start='2001-01-01', freq='5T', periods=100)
df = pd.DataFrame({'time':r, 'val': np.random.randint(1, 10, 100)})

out = df.groupby([df.time.dt.strftime('%d-%H-%M')]).val.count().reset_index()

ax = out.assign(label=out.time.str[:5]).plot(x='label', y='val', kind='bar')

seen_ticks = set()

for idx, label in enumerate(ax.xaxis.get_ticklabels()):
    if label.get_text() in seen_ticks:
        label.set_visible(False)
    else:
        seen_ticks.add(label.get_text())
plt.tight_layout()
plt.show()

這將僅顯示分鍾/小時的唯一X標記

在此處輸入圖片說明

1)使用pandas.DataFrame.from_dict(data)從字典創建數據pandas.DataFrame.from_dict(data) (請參閱https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html

2)這個問題尚不完全清楚,但我認為您想要的是

df['time'] = pd.to_datetime(df['time'])
df.set_index('time', inplace=True)

然后應用count()聚合。

3)這個問題我不清楚。

暫無
暫無

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

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