Преобразовать DataFrame Pandas в Таблицу и заполнить значения в зависимости от выполняемого условия? - PullRequest
0 голосов
/ 27 января 2019

У меня есть CSV-файл, содержащий список праздников, которые я читаю с помощью метода pandas.read_csv. Я хочу преобразовать штаты в первую колонку и уникальные даты праздников в другие колонки. И заполняйте строки логическим значением True только тогда, когда в этом состоянии есть праздник; иначе Ложь.

Вот нужный кадр данных:

enter image description here

и вот CSV, с которого я читаю:

enter image description here

вот мой код:

import pandas as pd
df = pd.read_csv('Holidays.csv')
#print(df.head())
df = df.transpose()
print(df)

Вот CSV:

State   Official Leaves
Michigain   28-01-2019
Texas   30-01-2019
Florida 05-02-2019
Hawaii  04-07-2019
Arizona 04-07-2019
North Carolina  04-07-2019
Illinois    04-07-2019
Ohio    04-07-2019
Georgia 04-07-2019
Michigain   04-07-2019
Texas   04-07-2019
Florida 04-07-2019
California  04-07-2019

Ответы [ 2 ]

0 голосов
/ 27 января 2019

В одну (длинную) строку

df = df.pivot(index='State', columns='Official Leaves', values='Official Leaves') \
        .fillna(False) \
        .applymap(lambda x: True if x else False)

Чтобы изменить имена столбцов на этот формат даты

df.columns = pd.to_datetime(df.columns) \
                 .to_series() \
                 .apply(lambda x: x.strftime('%b-%d'))
0 голосов
/ 27 января 2019

Я взял примерный фрейм данных (так как вы предоставили изображение), учитывая, что df выглядит так:

print(df)

     States Official Leaves
0  Michigan      2019-01-28
1     Texas      2019-01-30
2   Florida      2019-02-05
3    Hawaii      2019-07-04

Добавление столбца для строкового представления дня и месяца и использование pd.crosstab()

df['day_month']=df['Official Leaves'].dt.strftime('%b-%d')
pd.crosstab(df.States,df.day_month).astype(bool).reset_index().rename_axis(None,1)
#if you want states as index, just remove the reset_index() from the code
     States  Feb-05  Jan-28  Jan-30  Jul-04
0   Florida    True   False   False   False
1    Hawaii   False   False   False    True
2  Michigan   False    True   False   False
3     Texas   False   False    True   False

Примечание: Если dtype для столбца Official leaves является объектом, преобразуйте его в datetime, используя df['Official Leaves']=pd.to_datetime(df['Official Leaves'])

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