python - Pandas:在列标题中根据日期在顶部添加一行
问题描述
我有一个 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
我知道我必须在我可以做的日期时间标题上调用 day_name() 方法,我尝试遍历列并找到一种方法来做到这一点,但没有运气。
此外,如果不可能完全以这种方式获得它,那么欢迎任何其他想法。
任何帮助将不胜感激。
解决方案
您可以通过以下创建的第二级创建 MultiIndex DatetimeIndex.day_name
:
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
推荐阅读
- c# - 为什么我从 asp.net mvc 的下拉选择器中获取空值?我已将 IQueryable 用于下拉菜单
- react-native - 错误:找不到屏幕“入职”的“组件”、“getComponent”或“儿童”道具。如果您传递了“未定义”,则可能会发生这种情况
- c - 为什么我在 uart 中收到随机字符?
- flutter - Flutter: How can I unit test a Timer used by a Bloc using blocTest?
- rust - is it possible to insert record without id wasted when using diesel
- visual-studio-code - Differences between Commit, Commit Staged, and Commit All in VS Code
- c# - How to debug/troubleshoot LINQ Expression in C#.NET?
- sql - Keep repeating values from left table blank in sql left join
- node.js - Error - transports.recv.connectionState stuck in new status - Mediasoup (3.7)
- python - 如何为python中的某些列添加前缀