【问题标题】:How to calculate for each row the order of column value by row?如何为每一行逐行计算列值的顺序?
【发布时间】:2021-03-09 18:10:05
【问题描述】:

我有一个如下所示的数据框:

- date_x date_y date_z
0 2021-02-19 12:26:48+00:00 2021-02-19 16:15:21.510000+00:00 NaT
1 2021-02-19 16:16:54+00:00 2021-02-10 17:44:01+00:00 2021-02-11 10:10:01+00:00
1 2021-02-21 16:17:54+00:00 2021-02-20 17:44:01+00:00 2021-02-15 10:10:01+00:00

我想为每一行逐行计算每一列的顺序:

- date_x date_y date_z
0 0 1 NaN
1 2 0 1
1 2 1 0

然后获取整个数据框每列的平均顺序:

- date_x date_y date_z
0 1,33333333333333 0,666666666666667 0.5

我尝试使用 pandas Series.argsort(),但它与 Series.sort_values() 相同,但返回的是索引而不是值。 然后我想到迭代每一行并查找 sort_values 提供的列表的索引,但我确定必须有一个更快、更清洁的解决方案?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用DataFrame.rank,减去1,得到mean,然后将Series 转换为DataFrame 的一行DataFrame 并转置:

    df = df.rank(axis=1).sub(1).mean().to_frame().T
    print (df)
         date_x    date_y  date_z
    0  1.333333  0.666667     0.5
    

    【讨论】:

    • @LeleCanfora - 有日期时间吗?还是弦乐?什么返回print (df.dtypes)
    • 是的,这是最快最干净的解决方案,甚至不需要减去 1。谢谢
    • @LeleCanfora - 绝对同意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多