熊猫:分别对每一列进行排序

发布于 2021-01-29 14:10:50

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

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

首先,我尝试对每个列进行单独排序。我试过玩类似的东西: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

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

 df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Concatenation']).T])

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

关注者
0
被浏览
104
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一种方法:

    >>> 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]
    

    但是,您所做的有些奇怪。DataFrame不仅仅是不相关列的集合。在DataFrame中,每一
    代表一条记录,因此一列中的值在语义上链接到同一行中其他列中的值。通过独立地对列进行排序,您将丢弃此信息,因此行现在变得毫无意义。这就是reset_index在我的示例中需要的原因。同样,由于这个原因,无法就地执行此操作,您的示例建议您这样做。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看