【发布时间】:2022-01-17 15:21:19
【问题描述】:
有一个单行数据框,我需要根据一行中的值将其过滤成一个较小的带有过滤列的数据框。
最有效的方法是什么?
df = pd.DataFrame({'a':[1], 'b':[10], 'c':[3], 'd':[5]})
| a | b | c | d |
|---|---|---|---|
| 1 | 10 | 3 | 5 |
例如 top-3 功能:
| b | c | d |
|---|---|---|
| 10 | 3 | 5 |
【问题讨论】:
有一个单行数据框,我需要根据一行中的值将其过滤成一个较小的带有过滤列的数据框。
最有效的方法是什么?
df = pd.DataFrame({'a':[1], 'b':[10], 'c':[3], 'd':[5]})
| a | b | c | d |
|---|---|---|---|
| 1 | 10 | 3 | 5 |
例如 top-3 功能:
| b | c | d |
|---|---|---|
| 10 | 3 | 5 |
【问题讨论】:
使用每行排序并选择前 3 个值:
df1 = df.sort_values(0, axis=1, ascending=False).iloc[:, :3]
print (df1)
b d c
0 10 5 3
Series.nlargest 的解决方案:
df1 = df.iloc[0].nlargest(3).to_frame().T
print (df1)
b d c
0 10 5 3
【讨论】:
您可以转置T,并使用nlargest():
new = df.T.nlargest(columns = 0, n = 3).T
print(new)
b d c
0 10 5 3
【讨论】: