将数据帧转换为表并根据满足的条件填充值?

2024-05-18 10:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,其中包含我正在使用pandas.read\u csv方法读取的假日列表。我想将states转换为第一列,将unique Holidays Dates转换为其他列。并且仅当该州有假日时才用布尔值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

Tags: 文件csv方法pandasdf列表readholidays
2条回答

排成一(长)队

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'))

考虑到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

为日和月的字符串表示添加列并使用^{}

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

注意:如果Official leaves列的数据类型是object,则使用df['Official Leaves']=pd.to_datetime(df['Official Leaves'])将其转换为datetime

相关问题 更多 >