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

Python 熊猫:分别对每列进行排序,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据框看起来像这样,只是大得多 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

我的数据框看起来像这样,只是大得多

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在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')。

这里有一种方法:

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

然而,你所做的有些奇怪。数据帧不仅仅是不相关列的集合。在数据帧中,每一行代表一条记录,因此一列中的值在语义上链接到同一行中其他列中的值。通过对列进行独立排序,您将丢弃这些信息,因此行现在没有意义。这就是我的示例中需要重置索引的原因。此外,由于这个原因,没有办法做到这一点,您的示例表明您希望做到这一点。

我不知道这是否更好,但这里有一些其他方法可以做到这一点

 pd.DataFrame({key: sorted(value.values(), reverse=True) \
    for key, value in df.to_dict().iteritems()})

 pd.DataFrame({key: sorted(values, reverse=True) \
    for key, values in df.transpose().iterrows()})
相反,使用
对值进行排序,如下所示:

for col in df:
    df[col] = df[col].sort_values(ignore_index=True)

这有点奇怪。每列代表一次对话。有时候两个人,有时候三个人,有时候更多。对话中列出的人的顺序是不相关的,因为A:B==B:A。问题可以很容易地转换,但最终输出需要水平。我认为您可以/应该只使用
.values
,而不是删除索引。