Pandas 按日期值旋转 table 列

Pandas Pivot table column columns by date value

我有一个数据透视表 table,其中行按日期排序,然后列按字母顺序排列。

我希望看到不同的列顺序。例如,如果位置在第一行显示一个值,那么我希望它是第一列。

我基本上使用 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