【问题标题】: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'))