簡體   English   中英

熊貓:分別對每一列進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM