如何解决Pandas 数据透视表列按日期值
我有一个数据透视表,其中行按日期排序,然后列按字母顺序排列。
我希望以不同的方式查看列顺序。例如,如果 location 在第一行显示一个值,那么我希望它是第一列。
我基本上使用 sort_values 尝试了以下代码的每个版本:
df1 = pd.pivot_table(df1,values = 'num',index='date',columns = 'location_name',aggfunc = "sum")
result = df1.sort_values(('date'),ascending=False)
// +-----------+---+---+---+---+
// | date | a | b | c | d |
// +-----------+---+---+---+---+
// | 7/31/2021 | | | 1 | |
// | 8/1/2021 | | | 1 | |
// | 8/2/2021 | | | 1 | |
// | 8/3/2021 | | | | 2 |
// | 8/4/2021 | | | | 2 |
// | 8/5/2021 | | | | 2 |
// | 8/6/2021 | | | | 2 |
// | 8/7/2021 | | | | 2 |
// | 8/8/2021 | 3 | | | |
// | 8/9/2021 | 3 | | | |
// | 8/10/2021 | 3 | | | |
// +-----------+---+---+---+---+
所以上面列的顺序应该是 c,d,a,b,日期顺序保持不变。
有什么关于最好的方法的想法吗?
解决方法
试试:
cols = df.iloc[:,1:].apply(pd.Series.first_valid_index).sort_values().index
df = df[['date',*cols.tolist()]]
>>> df
date c d a b
0 7/31/2021 1.0 NaN NaN NaN
1 8/1/2021 1.0 NaN NaN NaN
2 8/2/2021 1.0 NaN NaN NaN
3 8/3/2021 NaN 2.0 NaN NaN
4 8/4/2021 NaN 2.0 NaN NaN
5 8/5/2021 NaN 2.0 NaN NaN
6 8/6/2021 NaN 2.0 NaN NaN
7 8/7/2021 NaN 2.0 NaN NaN
8 8/8/2021 NaN NaN 3.0 NaN
9 8/9/2021 NaN NaN 3.0 NaN
10 8/10/2021 NaN NaN 3.0 NaN
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。