[英]Pandas re-ordering values in Multi-Index columns on a row-by-row basis
我有以下多索引表:
一個 | 乙 | C | D | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | ||||||||
X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 |
2.2 | 5.1 | 3.4 | 1.8 | 1.5 | 6.7 | 8.1 | 7.5 | 6.1 | 2.1 | 9.3 | 7.1 | 8.2 | 1.1 | 1.4 | 2.5 |
7.9 | 3.2 | 1.1 | 5.3 | 9.3 | 3.1 | 0.9 | 3.2 | 4.1 | 5.1 | 7.7 | 4.3 | 8.1 | 0.4 | 2.4 | 4.1 |
數據點(x, y)
已隨機分配給 A - D 列。我想按t_1
處的x
值對它們重新排序 - 以斜體顯示。 其他值對於重新排序無關緊要,但會由t_1
處的x
值帶到它們的新列。 這意味着每一行都會以不同的方式重新排序。
我想要一些處理上表的代碼來生成:
一個 | 乙 | C | D | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | ||||||||
X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 |
1.5 | 6.7 | 8.1 | 7.5 | 2.2 | 5.1 | 3.4 | 1.8 | 6.1 | 2.1 | 9.3 | 7.1 | 8.2 | 1.1 | 1.4 | 2.5 |
4.1 | 5.1 | 7.7 | 4.3 | 7.9 | 3.2 | 1.1 | 5.3 | 8.1 | 0.4 | 2.4 | 4.1 | 9.3 | 3.1 | 0.9 | 3.2 |
嘗試使用unstack
和groupby
:(我現在能想到的唯一解決方案)
df1 = df.unstack().unstack()
for col in df1.columns:
a = []
for i,g in df1[col].groupby(level=0):
a.append((i,g.iloc[0]))
get_sortedli = sorted(a, key=lambda x: x[1])
order_col = [f1 for f1,f2 in get_sortedli]
val = (df.iloc[col].reindex(order_col, axis=1, level=0))
df.iloc[col] = val
東風:
我想象這是一個 4 塊排列(A,B,C,D)問題。 安排好后獲取值並將其分配給真正的 dataframe。
df1:
這是一個選項,主要涉及干預數據的形狀,排序,然后使用重新整形的值和原始df
列(MultiIndex)來創建最終的 dataframe:
df2 = df.T.unstack(level=0).T.reset_index(level=0, col_fill='row')
df2 = df2.sort_values([('level_0', 'row'), ('t_1', 'x')], ignore_index=True)
values = df2.drop(('level_0', 'row'), axis=1).values.reshape(2, -1)
df3 = pd.DataFrame(data=values, columns=df.columns) # using original df's columns
Output:
A B C D
t_1 t_2 t_1 t_2 t_1 t_2 t_1 t_2
x y x y x y x y x y x y x y x y
0 1.5 6.7 8.1 7.5 2.2 5.1 3.4 1.8 6.1 2.1 9.3 7.1 8.2 1.1 1.4 2.5
1 4.1 5.1 7.7 4.3 7.9 3.2 1.1 5.3 8.1 0.4 2.4 4.1 9.3 3.1 0.9 3.2
以更易讀但不准確的表格格式:
一個 | 乙 | C | D | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | t_1 | t_2 | ||||||||
X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 | X | 是的 |
1.5 | 6.7 | 8.1 | 7.5 | 2.2 | 5.1 | 3.4 | 1.8 | 6.1 | 2.1 | 9.3 | 7.1 | 8.2 | 1.1 | 1.4 | 2.5 |
4.1 | 5.1 | 7.7 | 4.3 | 7.9 | 3.2 | 1.1 | 5.3 | 8.1 | 0.4 | 2.4 | 4.1 | 9.3 | 3.1 | 0.9 | 3.2 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.