【问题标题】:Transform a Pandas Dataframe into a Table and populate values based on a condition being met?将 Pandas 数据框转换为表格并根据满足的条件填充值?
【发布时间】:2019-01-27 12:52:13
【问题描述】:

我有一个 csv 文件,其中包含我正在使用 pandas.read_csv 方法读取的假期列表。我想将状态转换为第一列,将唯一的假期日期转换为其他列。并且仅当该州有假期时才用布尔值 True 填充行;否则为假。

这是所需的数据框:

这是我正在读取的 csv:

这是我的代码:

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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'))
      

      【讨论】:

        猜你喜欢
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 2021-06-04
        • 1970-01-01
        • 2018-10-06
        • 2021-11-16
        • 1970-01-01
        相关资源
        最近更新 更多