堆叠数据框和排名

时间:2018-11-23 12:51:00

标签: python pandas dataframe

在问题中找不到我所需要的,如果我错了,请纠正我。我有许多形状相似的df,其中可能包含nan。假设不包含nan的df如下所示:

np.random.seed(1)
mat = lambda: np.random.normal(size=10).reshape((5, 2))
df1 = pd.DataFrame(mat())
df2 = pd.DataFrame(mat())
df3 = pd.DataFrame(mat())

我想以某种方式将df1df2df3彼此堆叠。然后将每个值排列在df1df2df3(即堆栈级别)上。

在这种情况下,各个df看起来像:

df1

enter image description here

df2

enter image description here

df3

enter image description here

因此,在这种情况下,“ .iloc[0, 0]”中的值是:1.62、1.46和-1.1,因此排名df1的值将是3df2将具有值2df3将具有值1。然后对数据框级别上的每个值执行此排名。一般情况下,大约有16个数据帧彼此堆叠,只有5个等级,当存在nan时,df的等级为0。

1 个答案:

答案 0 :(得分:1)

我认为您需要concatGroupBy.rank

df1.loc[0,1] = np.nan

df = pd.concat([df1, df2, df3], keys=('df1','df2','df3')).groupby(level=1).rank().fillna(0)
print (df)
         0    1
df1 0  3.0  0.0
    1  1.0  1.0
    2  1.0  1.0
    3  3.0  3.0
    4  3.0  1.0
df2 0  2.0  1.0
    1  2.0  2.0
    2  3.0  2.0
    3  1.0  2.0
    4  2.0  3.0
df3 0  1.0  2.0
    1  3.0  3.0
    2  2.0  3.0
    3  2.0  1.0
    4  1.0  2.0