根据优先级和特定行数拆分数据框
Split a dataframe according to priorities and specific number of rows
我想根据优先级列将一个数据帧拆分为 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 行 Dataframe 中,而值为 8 的行会出现在 Dataframe 2 中。
同样,我认为同样重要的是,在该迭代中,当生成 3 行的第一个数据帧时,应从原始数据帧中“提取”它们,以便在生成时不考虑它们其他数据框。我希望我已经很好地解释了自己,并且有人可以帮助我。致以最诚挚的问候和感谢!
IIUC 这应该按预期工作:
(1) 您创建了一个列 bin_Priority
,它将每一行应用于正确的 bin,bin 的标签是查找它们的优先顺序。
(2) sort_values
在 bin_Priority
,然后在 Priority
.
的每个 bin 中
(3) split
你的 df
变成 3 df's
,第一个有 3 行,第二个有 2 行,第三个有 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
这是我将巴黎的值从 1
更改为 7
的示例。值 8
(应该在第一个 df
中)在第二个 df
中结束,与值 11
(从第二到第三)相同。
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
我想根据优先级列将一个数据帧拆分为 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 行 Dataframe 中,而值为 8 的行会出现在 Dataframe 2 中。
同样,我认为同样重要的是,在该迭代中,当生成 3 行的第一个数据帧时,应从原始数据帧中“提取”它们,以便在生成时不考虑它们其他数据框。我希望我已经很好地解释了自己,并且有人可以帮助我。致以最诚挚的问候和感谢!
IIUC 这应该按预期工作:
(1) 您创建了一个列 bin_Priority
,它将每一行应用于正确的 bin,bin 的标签是查找它们的优先顺序。
(2) sort_values
在 bin_Priority
,然后在 Priority
.
(3) split
你的 df
变成 3 df's
,第一个有 3 行,第二个有 2 行,第三个有 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
这是我将巴黎的值从 1
更改为 7
的示例。值 8
(应该在第一个 df
中)在第二个 df
中结束,与值 11
(从第二到第三)相同。
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