我正在尝试在熊猫上选择一列。该列是来自时间戳数据的dt.date(来自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
但是,我无法过滤
我正在尝试两种方法来选择一列
这是第一次尝试
输入
pivot_df['2018-09-07']
输出
File "<ipython-input-61-4ac7906c5f54>", line 1
pivot_df[2018-09-07]
^
SyntaxError: invalid token
这是第二次尝试
输入
pivot_df[2018-09-07]
输出
KeyError: '2018-09-07'
我不知道过程中出了什么问题,所以我无法查询它们
答案 0 :(得分:3)
您需要:
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
答案 1 :(得分:1)
您的列是datetime
对象而不是字符串存在问题。奇怪的是,为什么这些列不是DatetimeIndex
对象(否则您所做的将行得通)。
您可以执行以下操作:
pivot_df.columns = pivot_df.columns.astype(str)
或者,
pivot_df.columns = pd.DatetimeIndex(pivot_df.columns)
现在,
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
注意:即使您使用其他答案, 您也需要做同样的事情。