我想根據優先級列將資料框拆分為 3 個新資料框。我的資料框如下:
City Priority
0 New York 3
1 Paris 1
2 Boston 7
3 La Habana 6
4 Bilbao 10
5 Roma 2
6 Barcelona 1
7 Bruselas 8
8 Tokyo 7
9 Caracas 11
有 3 種型別的優先級:
- 優先級 7 至 9
- 優先級 1 至 6
- 優先級從 10 到 11
我們的想法是將此資料幀分成 3 份,其結構如下,依次按其優先級的值排序:
- 3行優先級從7到9的資料框
- 具有 5 行優先級從 1 到 6 的資料框
- 具有 2 行優先級從 10 到 11 的資料框。
結果如下:
資料框 1:
City Priority
0 Boston 7
1 Tokyo 7
2 Bruselas 8
資料框 2:
City Priority
0 Paris 1
1 Barcelona 1
2 Roma 2
3 New York 3
4 La Habana 6
資料框 3:
City Priority
0 Bilbao 10
1 Caracas 11
我認為重要的是要注意,如果沒有優先級 7 到 9 的行,則為該資料幀 3 選擇的優先級編號將為 10,如果不是 11,如果不是 1,如果不是 2,等等。與其余資料幀和優先級相同:第二個為 1、2、3、4 等,第三個為 10、11、1、2、3 等。
此外,如果有 4 個值,例如 7、7、7、8,則只有第 7、7、7 行會出現在 3 行資料框中,而值為 8 的行將出現在資料框 2 中。
同樣,我認為同樣重要的是,在該迭代中,當生成 3 行的第一個資料幀時,它們應該從原始資料幀中“提取”,以便在生成其他資料幀時不考慮它們。我希望我已經很好地解釋了自己,并且有人可以幫助我。最好的問候和感謝!
uj5u.com熱心網友回復:
IIUC 這應該按預期作業:
(1) 您創建一列bin_Priority,將每一行應用于正確的 bin,bin 的標簽是查找它們的優先級。
(2) sort_valueson bin_Priority,然后在每個 bin 上Priority。
(3)split你df成 3 df's,第 1 有 3 行,第 2 有 2 行,第 3 有 5 行。如果缺少優先級組的值,它會選擇正確的值,因為它們的排序正確。
請讓我知道這是否是您要搜索的內容。
df = pd.DataFrame({
'City': ['New York','Paris','Boston','La Habana','Bilbao','Roma','Barcelona','Bruselas','Tokyo','Caracas'],
'Priority': [3, 1, 7, 6, 10, 2, 1, 8, 7, 11]
})
#(1)
df['bin_Priority'] = pd.cut(df['Priority'], bins=[0,6,9,11], labels=[3, 1, 2]).to_numpy()
#(2)
ordered_priority_df = df.sort_values(by=['bin_Priority', 'Priority'])
#(3)
out = np.split(ordered_priority_df, [3,5])
print(df, ordered_priority_df, *out, sep='\n\n')
#df
City Priority bin_Priority
0 New York 3 3
1 Paris 1 3
2 Boston 7 1
3 La Habana 6 3
4 Bilbao 10 2
5 Roma 2 3
6 Barcelona 1 3
7 Bruselas 8 1
8 Tokyo 7 1
9 Caracas 11 2
#ordered_priority_df
City Priority bin_Priority
2 Boston 7 1
8 Tokyo 7 1
7 Bruselas 8 1
4 Bilbao 10 2
9 Caracas 11 2
1 Paris 1 3
6 Barcelona 1 3
5 Roma 2 3
0 New York 3 3
3 La Habana 6 3
# out[0]
City Priority bin_Priority
2 Boston 7 1
8 Tokyo 7 1
7 Bruselas 8 1
# out[1]
City Priority bin_Priority
4 Bilbao 10 2
9 Caracas 11 2
# out[2]
City Priority bin_Priority
1 Paris 1 3
6 Barcelona 1 3
5 Roma 2 3
0 New York 3 3
3 La Habana 6 3
這是一個示例,我將 Paris 的值從 更改1為7。value 8(應該在 1stdf中)以 2nd 結尾,df并且與 value 相同11(從 2nd 到 3rd)。
df = pd.DataFrame({
'City': ['New York','Paris','Boston','La Habana','Bilbao','Roma','Barcelona','Bruselas','Tokyo','Caracas'],
'Priority': [3, 7, 7, 6, 10, 2, 1, 8, 7, 11]
})
df['bin_Priority'] = pd.cut(df['Priority'], bins=[0,6,9,11], labels=[3, 1, 2]).to_numpy()
ordered_priority_df = df.sort_values(by=['bin_Priority', 'Priority'])
out = np.split(ordered_priority_df, [3,5])
print(df, *out, sep='\n\n')
City Priority bin_Priority
0 New York 3 3
1 Paris 7 1
2 Boston 7 1
3 La Habana 6 3
4 Bilbao 10 2
5 Roma 2 3
6 Barcelona 1 3
7 Bruselas 8 1
8 Tokyo 7 1
9 Caracas 11 2
City Priority bin_Priority
1 Paris 7 1
2 Boston 7 1
8 Tokyo 7 1
City Priority bin_Priority
7 Bruselas 8 1
4 Bilbao 10 2
City Priority bin_Priority
9 Caracas 11 2
6 Barcelona 1 3
5 Roma 2 3
0 New York 3 3
3 La Habana 6 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479733.html
上一篇:Pandas:每年生成兩個日期
