如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

拉维

我正在尝试对 Pandas 数据帧的每一行进行排序,并在新数据帧中获取排序值的索引。我可以慢慢来。任何人都可以建议使用并行化或矢量化代码对此进行改进。我在下面发布了一个例子。

data_url = ' https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv '

# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)

# drop categorical column
gapminder.drop(['country', 'continent'], axis=1, inplace=True) 

# print the first three rows
print(gapminder.head(n=3))

   year         pop  lifeExp   gdpPercap
0  1952   8425333.0   28.801  779.445314
1  1957   9240934.0   30.332  820.853030
2  1962  10267083.0   31.997  853.100710

我正在寻找的结果是这个

tag_0   tag_1   tag_2   tag_3
0   pop year    gdpPercap   lifeExp
1   pop year    gdpPercap   lifeExp
2   pop year    gdpPercap   lifeExp

在这种情况下,由于pop始终高于gdpPercaplifeExp,因此始终排在首位。

我可以使用以下代码实现所需的输出。但是如果df有很多行/列,计算需要更长的时间

任何人都可以建议对此进行改进

def sort_df(df):
    sorted_tags = pd.DataFrame(index = df.index, columns = ['tag_{}'.format(i) for i in range(df.shape[1])])
    for i in range(df.shape[0]):
        sorted_tags.iloc[i,:] = list( df.iloc[i, :].sort_values(ascending=False).index)
    return sorted_tags

sort_df(gapminder)
马蒂亚斯·奥萨德尼克

这可能和 numpy 一样快:

def sort_df(df):
    return pd.DataFrame(
        data=df.columns.values[np.argsort(-df.values, axis=1)],
        columns=['tag_{}'.format(i) for i in range(df.shape[1])]
    )

print(sort_df(gapminder.head(3)))

  tag_0 tag_1      tag_2    tag_3
0   pop  year  gdpPercap  lifeExp
1   pop  year  gdpPercap  lifeExp
2   pop  year  gdpPercap  lifeExp

说明:np.argsort沿行对值进行排序,但返回对数组进行排序的索引而不是已排序的值,后者可用于对数组进行协同排序。减号按降序排序。在您的情况下,您使用索引对列进行排序。numpy 广播负责返回正确的形状。

您的示例的运行时间约为 3 毫秒,而您的函数为 2.5 秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据上一行中的值对sql结果进行排序?

来自分类Dev

按列值对数据框中的每一行进行排序

来自分类Dev

根据一行的内容对所有行进行排序

来自分类Dev

如何将数据帧1的每一行与数据帧2的每一行进行比较?

来自分类Dev

弹簧数据:按条件对每一行进行排序

来自分类Dev

numpy矩阵,通过对每一行进行排序将0设置为值

来自分类Dev

在R中,对两个匹配数据帧的每一行进行排序

来自分类Dev

根据行模式对行进行排序

来自分类Dev

根据不同的列值对行进行排序

来自分类Dev

在两列之间分别对每一行进行排序

来自分类Dev

R:合并2个数据帧,并在前一行和后一行进行索引

来自分类Dev

每输入一行返回多行/列的数据帧

来自分类Dev

有条件地对数据帧的每一行进行计数

来自分类Dev

如何对熊猫数据框中的每一行进行排序并获取索引?

来自分类Dev

如何找到数据帧每一行的最小值索引?

来自分类Dev

根据另一行中的值对Excel行进行排序

来自分类Dev

如何返回第一行,该行比数据帧中每列的最小值高10%?

来自分类Dev

根据一行的内容对所有行进行排序

来自分类Dev

如何按出现次数对每一行进行排序?

来自分类Dev

如何将数据帧1的每一行与数据帧2的每一行进行比较?

来自分类Dev

Microsoft Excel如何将第一行转换为列,然后根据第一列对其余行进行排序

来自分类Dev

根据最后一行的值按列对Deedle Frame进行排序

来自分类Dev

根据行模式对行进行排序

来自分类Dev

R:合并2个数据帧,并在前一行和后一行进行索引

来自分类Dev

根据前一行的值对 SQL 查询进行排序

来自分类Dev

如何对数据框每一行的值进行排序并返回排序后的列名

来自分类Dev

如何在python中对pandas数据帧的每一行进行计算?

来自分类Dev

Pandas 对每一行进行排序并打印前 5 个

来自分类Dev

在 Pandas 数据帧上使用转换函数,为数据帧的每一行返回新值

Related 相关文章

  1. 1

    如何根据上一行中的值对sql结果进行排序?

  2. 2

    按列值对数据框中的每一行进行排序

  3. 3

    根据一行的内容对所有行进行排序

  4. 4

    如何将数据帧1的每一行与数据帧2的每一行进行比较?

  5. 5

    弹簧数据:按条件对每一行进行排序

  6. 6

    numpy矩阵,通过对每一行进行排序将0设置为值

  7. 7

    在R中,对两个匹配数据帧的每一行进行排序

  8. 8

    根据行模式对行进行排序

  9. 9

    根据不同的列值对行进行排序

  10. 10

    在两列之间分别对每一行进行排序

  11. 11

    R:合并2个数据帧,并在前一行和后一行进行索引

  12. 12

    每输入一行返回多行/列的数据帧

  13. 13

    有条件地对数据帧的每一行进行计数

  14. 14

    如何对熊猫数据框中的每一行进行排序并获取索引?

  15. 15

    如何找到数据帧每一行的最小值索引?

  16. 16

    根据另一行中的值对Excel行进行排序

  17. 17

    如何返回第一行,该行比数据帧中每列的最小值高10%?

  18. 18

    根据一行的内容对所有行进行排序

  19. 19

    如何按出现次数对每一行进行排序?

  20. 20

    如何将数据帧1的每一行与数据帧2的每一行进行比较?

  21. 21

    Microsoft Excel如何将第一行转换为列,然后根据第一列对其余行进行排序

  22. 22

    根据最后一行的值按列对Deedle Frame进行排序

  23. 23

    根据行模式对行进行排序

  24. 24

    R:合并2个数据帧,并在前一行和后一行进行索引

  25. 25

    根据前一行的值对 SQL 查询进行排序

  26. 26

    如何对数据框每一行的值进行排序并返回排序后的列名

  27. 27

    如何在python中对pandas数据帧的每一行进行计算?

  28. 28

    Pandas 对每一行进行排序并打印前 5 个

  29. 29

    在 Pandas 数据帧上使用转换函数,为数据帧的每一行返回新值

热门标签

归档