<p>使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.strftime.html" rel="nofollow noreferrer">^{<cd1>}</a>和<code>%I%p</code>以<code>12h</code>格式使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.strftime.html" rel="nofollow noreferrer">^{<cd1>}</a>几个小时,然后需要一些处理来删除最后一个<code>m</code>,小写和删除第一个<code>0</code>,对于天使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.day_name.html" rel="nofollow noreferrer">^{<cd6>}</a>并传递给<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.crosstab.html" rel="nofollow noreferrer">^{<cd7>}</a>,使用原始顺序的最后一个<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html" rel="nofollow noreferrer">^{<cd8>}</a>:</p>
<pre><code>hours = df["Timestamp"].dt.strftime('%I%p').str[:-1].str.lower().str.lstrip('0')
days = df["Timestamp"].dt.day_name()
df = pd.crosstab(days, hours).reindex(index=days.unique(), columns=hours.unique())
</code></pre>
<p>具有指定列的可选项:</p>
<pre><code>df['hours'] = df["Timestamp"].dt.strftime('%I%p').str[:-1].str.lower().str.lstrip('0')
df['days'] = df["Timestamp"].dt.day_name()
df = pd.crosstab(df['days'], df['hours']).reindex(index=df['days'].unique(),
columns=df['hours'].unique())
</code></pre>
<hr/>
<pre><code>print (df)
Timestamp 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a ... 4p 5p 6p 7p 8p \
Timestamp ...
Friday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Saturday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Sunday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Monday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Tuesday 2 2 2 1 1 1 1 1 1 1 ... 1 1 1 1 1
Wednesday 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1
Thursday 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1
Timestamp 9p 10p 11p 12a 1a
Timestamp
Friday 2 2 2 0 1
Saturday 2 2 2 2 2
Sunday 2 2 2 2 2
Monday 2 2 2 5 2
Tuesday 1 1 1 1 2
Wednesday 1 1 1 0 1
Thursday 1 1 1 1 1
[7 rows x 24 columns]
</code></pre>
<p>如果需要在列表中定义自定义顺序,请使用<code>ordered Categorical</code>s:</p>
<pre><code>hourscat = ['12a', '1a', '2a', '3a', '4a', '5a', '6a',
'7a', '8a', '9a','10a','11a',
'12p', '1p', '2p', '3p', '4p', '5p',
'6p', '7p', '8p', '9p', '10p', '11p'];
dayscat = ['Saturday', 'Friday', 'Thursday',
'Wednesday', 'Tuesday', 'Monday', 'Sunday']
hours = pd.Categorical(df["Timestamp"].dt.strftime('%I%p').str[:-1].str.lower().str.lstrip('0'), ordered=True, categories=hourscat)
days = pd.Categorical(df["Timestamp"].dt.day_name(), ordered=True, categories=dayscat)
df = pd.crosstab(days, hours)
</code></pre>
<hr/>
<pre><code>print (df)
col_0 12a 1a 2a 3a 4a 5a 6a 7a 8a 9a ... 2p 3p 4p 5p 6p \
row_0 ...
Saturday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Friday 0 1 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Thursday 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1
Wednesday 0 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1
Tuesday 1 2 2 2 2 1 1 1 1 1 ... 1 1 1 1 1
Monday 5 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
Sunday 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2
col_0 7p 8p 9p 10p 11p
row_0
Saturday 2 2 2 2 2
Friday 2 2 2 2 2
Thursday 1 1 1 1 1
Wednesday 1 1 1 1 1
Tuesday 1 1 1 1 1
Monday 2 2 2 2 2
Sunday 2 2 2 2 2
[7 rows x 24 columns]
</code></pre>