【发布时间】:2018-02-03 09:42:04
【问题描述】:
这是一个更大的df_data 1000 x 150 的简单版本
Date A B C D A' B' C' D'
31/01/2017 47 15 45 40 10 7 12 8
28/02/2017 22 34 28 13 3 2 26 4
31/03/2017 25 12 13 47 1 5 6 59
基本问题是需要对 A、B、C、D 列进行行排序,并使用最大/最小标准来定位 A'、B'、C'、D' 列中的相应行值
需要关注。
(1) 找出每个日期(行)的 n 个最大值和 n 个最小值。 让我们在这里假设n = 2。 (2) 以 (1) 中的最小值/最大值为条件,使用相关的列标题在同一行中为 A',B,C',D' 中的不同列找到相应的值 (在相同的 df 或不同的 df 中具有完全相同的日期索引)
假设 A,B,C,D 和 A',B',C',D' 之间存在 1-1 映射)
想要的结果:
31/01/2017: max1 = 10, max2 =12 ; min1 = 7, min2 = 8
28/02/2017: max1 = 2, max2 =26 ; min1 = 4, min2 = 3
31/03/2017: max1 = 59, max2 = 1 ; min1 = 5, min2 = 6
我可以找到例如使用的最大值
df_data [["A","B","C","D"]].apply(lambda row: np.max(row),axis=1)
但是如何在.apply 中使用iloc 函数或其他方式来查找该最大值的col 标头(索引)? (我在numpy 数组中尝试了.argsort,但无法到达任何地方)
另外,如何使用rank 或sort 在每行中找到顶部n 和底部n 值(其中n > 1)?我尝试按照以下方式对行进行排序(降序)
df_data.values.sort
df_data = df_data.iloc[:,::-1]
这似乎可行,但我的最终目标是找到列 A'、B'、C'、D' 中的值
如果有点长,请见谅。
【问题讨论】:
标签: python pandas sorting dataframe row