[英]pandas: sort each column individually
我的数据框看起来像这样,只是大得多。
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' 的东西)。
这是一种方法:
>>> 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
的原因。 此外,因此,无法就地执行此操作,您的示例表明您想要这样做。
pandas.Series.order
已弃用,因为 pandas=0.17。 相反,使用sort_values
如下:
for col in df:
df[col] = df[col].sort_values(ignore_index=True)
我不知道这是否更好,但这里有一些其他方法可以做到这一点。
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()})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.