Выбор одного столбца на пандах (результат из datetime.date из отметки времени) - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь выбрать один столбец на пандах. Этот столбец является результатом 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

Но я не могу фильтровать

Я пытаюсь двумя способами выбрать один столбец

Вот первая попытка

Input

pivot_df['2018-09-07']

выход

  File "<ipython-input-61-4ac7906c5f54>", line 1
    pivot_df[2018-09-07]
                     ^
SyntaxError: invalid token

Вот вторая попытка

Input

pivot_df[2018-09-07]

выход

KeyError: '2018-09-07'

Я не знаю, что не так в процессе, поэтому я не могу их запросить

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вам нужно:

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
0 голосов
/ 07 сентября 2018

Существует проблема с вашими столбцами 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

Примечание: вам нужно будет сделать то же самое, даже , если вы используете другой ответ.

...