我有一个以日期为列标题的DataFrame数据透视表,如下所示:
Due Date 2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
Customer
Aviva 0 0 0 0 1000
Debenhams 0 75325 0 0 0
H&M 1204 0 0 0 0
我想在标题下面添加一行,该行的星期几与标题的日期相对应:
Due Date 2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
Day Wednesday Sunday Wednesday Wednesday Friday
Customer
Aviva 0 0 0 0 1000
Debenhams 0 75325 0 0 0
H&M 1204 0 0 0 0
我知道我必须在datetime标头上调用day_name((方法,我可以这样做,我试图在列上迭代并找到这样做的方法,但没有成功。
此外,如果不可能做到这一点,那么任何其他想法都是受欢迎的。
如有任何帮助,我们将不胜感激。
您可以通过DatetimeIndex.day_name
:创建的第二级创建MultiIndex
df.columns = [df.columns, pd.to_datetime(df.columns).day_name()]
print (df)
2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
Wednesday Sunday Wednesday Wednesday Friday
Due Date
Aviva 0 0 0 0 1000
Debenhams 0 75325 0 0 0
H&M 1204 0 0 0 0
如果还需要设置列名,请使用MultiIndex.from_arrays
:
df.columns = pd.MultiIndex.from_arrays([df.columns,
pd.to_datetime(df.columns).day_name()],
names=('Date','Day'))
print (df)
Date 2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
Day Wednesday Sunday Wednesday Wednesday Friday
Due Date
Aviva 0 0 0 0 1000
Debenhams 0 75325 0 0 0
H&M 1204 0 0 0 0
编辑:
如果可能的话,列中的一些非日期时间值:
df['sum'] = df.sum(axis=1)
df.columns = [df.columns, pd.to_datetime(df.columns, errors='coerce').day_name().fillna('-')]
print (df)
2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1 sum
Wednesday Sunday Wednesday Wednesday Friday -
Due Date
Aviva 0 0 0 0 1000 1000
Debenhams 0 75325 0 0 0 75325
H&M 1204 0 0 0 0 1204