Python 在pandas上选择一列(来自datetime.date from timestamp的结果)
我正在尝试选择一个关于熊猫的专栏。该列是时间戳数据中dt.date(fromPython 在pandas上选择一列(来自datetime.date from timestamp的结果),python,pandas,datetime,timestamp,Python,Pandas,Datetime,Timestamp,我正在尝试选择一个关于熊猫的专栏。该列是时间戳数据中dt.date(fromdatetime)的结果。为了更好地理解这个问题,下面是完整的故事 这是数据 created_at final_score date 2018-09-07 03:22:10.753 63 2018-09-07 2018-09-06 11:31:10.312 17 2018-09-06 2018-09-06 02:53:40.136 79
datetime
)的结果。为了更好地理解这个问题,下面是完整的故事
这是数据
created_at final_score date
2018-09-07 03:22:10.753 63 2018-09-07
2018-09-06 11:31:10.312 17 2018-09-06
2018-09-06 02:53:40.136 79 2018-09-06
2018-09-07 00:49:07.007 61 2018-09-07
2018-09-06 12:42:41.523 64 2018-09-06
2018-09-06 08:23:32.121 56 2018-09-06
2018-09-05 13:15:16.082 58 2018-09-05
2018-09-06 06:57:19.128 39 2018-09-06
2018-09-06 09:00:56.311 60 2018-09-06
2018-09-05 23:59:22.213 42 2018-09-05
这是我的密码
df['date'] = df['timestamp'].dt.date
pivot_df = df.groupby(['date','score']).size().unstack(fill_value = 0).reset_index(),T
pivot_df = pivot_df.sort_values('date', ascending=False).T
pivot_df.columns = pivot_df.iloc[0]
pivot_df = pivot_df.iloc[1:]
这是结果
date 2018-09-07 2018-09-06 2018-09-05
final_score
17 0 1 0
39 0 1 0
42 0 0 1
56 0 1 0
58 0 0 1
60 0 1 0
61 1 0 0
63 1 0 0
64 0 1 0
79 0 1 0
但是,我不能过滤
我正在尝试两种方法来选择一列
这是第一次尝试
输入
输出
File "<ipython-input-61-4ac7906c5f54>", line 1
pivot_df[2018-09-07]
^
SyntaxError: invalid token
KeyError: '2018-09-07'
输出
File "<ipython-input-61-4ac7906c5f54>", line 1
pivot_df[2018-09-07]
^
SyntaxError: invalid token
KeyError: '2018-09-07'
我不知道这个过程中出了什么问题,所以我无法查询它们,因为您的列是
datetime
对象,而不是字符串。奇怪的是,为什么这些列不是DatetimeIndex
对象(否则,您所做的工作就会起作用)
您可以执行以下任一操作:
pivot_df.columns = pivot_df.columns.astype(str)
或者
现在
pivot_df['2018-09-07']
final_score
17 0
39 0
42 0
56 0
58 0
60 0
61 1
63 1
64 0
79 0
Name: 2018-09-07, dtype: object
注意:即使使用另一个答案,您也需要做同样的事情。您需要:
df.pivot_table(index='final_score',columns='date',aggfunc='count').fillna(0)
df.columns = df1.columns.levels[1].astype(str)
date 2018-09-05 2018-09-06 2018-09-07
final_score
17 0.0 1.0 0.0
39 0.0 1.0 0.0
42 1.0 0.0 0.0
56 0.0 1.0 0.0
58 1.0 0.0 0.0
60 0.0 1.0 0.0
61 0.0 0.0 1.0
63 0.0 0.0 1.0
64 0.0 1.0 0.0
79 0.0 1.0 0.0
df['2018-09-05']
final_score
17 0.0
39 0.0
42 1.0
56 0.0
58 1.0
60 0.0
61 0.0
63 0.0
64 0.0
79 0.0
Name: 2018-09-05, dtype: float64
虽然这可能是一个不同的解决方案,但它并没有回答OP关于他们为什么会出现这种行为的问题,而且无论如何,您的代码也会产生同样的问题。
df_pivot.columns
给出了这个多索引(levels=[['created_at'],[2018-09-052018-09-062018-09-07]],labels=[[0,0,0,1,2]],名称=[无,'日期')
我不能参加df_pivot.columns=['final_score','2018-09-05','2018-09-06','2018-09-07']
@NabihBawazir Check现在我用多索引和列问题更新了该问题。@coldspeed是的,我同意,问题是列是datetime index
。因此将我的多索引输出更改为OP所需的解决方案。感谢您的评论。如果不是,等待@sandp编辑答案将是最好的答案
df.pivot_table(index='final_score',columns='date',aggfunc='count').fillna(0)
df.columns = df1.columns.levels[1].astype(str)
date 2018-09-05 2018-09-06 2018-09-07
final_score
17 0.0 1.0 0.0
39 0.0 1.0 0.0
42 1.0 0.0 0.0
56 0.0 1.0 0.0
58 1.0 0.0 0.0
60 0.0 1.0 0.0
61 0.0 0.0 1.0
63 0.0 0.0 1.0
64 0.0 1.0 0.0
79 0.0 1.0 0.0
df['2018-09-05']
final_score
17 0.0
39 0.0
42 1.0
56 0.0
58 1.0
60 0.0
61 0.0
63 0.0
64 0.0
79 0.0
Name: 2018-09-05, dtype: float64