pandas:单独对每列进行排序

Dat*_*ede 4 python dataframe pandas

我的数据框看起来像这样,只是更大.

d = {'Col_1' : pd.Series(['A', 'B']),
 'Col_2' : pd.Series(['B', 'A', 'C']),
 'Col_3' : pd.Series(['B', 'A']),
 'Col_4' : pd.Series(['C', 'A', 'B', 'D']),
 'Col_5' : pd.Series(['A', 'C']),}
df = pd.DataFrame(d)

Col_1  Col_2  Col_3  Col_4  Col_5
  A      B      B      C      A
  B      A      A      A      C
  NaN    C      NaN    B      NaN
  NaN    NaN    NaN    D      NaN
Run Code Online (Sandbox Code Playgroud)

首先,我试图单独对每列进行排序.我曾经尝试过类似的东西:df.sort([lambda x: x in df.columns], axis=1, ascending=True, inplace=True)但是最终却出现了错误.如何对每个列进行单独排序,最终得到如下结果:

Col_1  Col_2  Col_3  Col_4  Col_5
  A      A      A      A      A
  B      B      B      B      C
  NaN    C      NaN    C      NaN
  NaN    NaN    NaN    D      NaN
Run Code Online (Sandbox Code Playgroud)

其次,我希望连接列中的行

 df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Concatenation']).T])
Run Code Online (Sandbox Code Playgroud)

在用''替换np.nan之后,我可以将所有内容与上面的行组合在一起,但结果会被粉碎('AB')并且需要额外的步骤来清理(变成'A:B'之类的东西).

Fel*_*lix 15

pandas.Series.order自 pandas=0.17 起已弃用。相反,请sort_values按如下方式使用:

for col in df:
    df[col] = df[col].sort_values(ignore_index=True)
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 6

这是一种方式:

>>> pandas.concat([df[col].order().reset_index(drop=True) for col in df], axis=1, ignore_index=True)
11:      0    1    2  3    4
0    A    A    A  A    A
1    B    B    B  B    C
2  NaN    C  NaN  C  NaN
3  NaN  NaN  NaN  D  NaN

[4 rows x 5 columns]
Run Code Online (Sandbox Code Playgroud)

但是,你所做的有点奇怪.DataFrames不仅仅是不相关列的集合.在DataFrame中,每一代表一条记录,因此一列中的值在语义上与同一行中其他列中的值相关联.通过独立地对列进行排序,您将丢弃此信息,因此行现在毫无意义.这就是reset_index我的例子中需要的原因.此外,正因为如此,没有办法就地执行此操作,您的示例建议您这样做.