[英]Pandas: change order of crosstab result
如何更改pd.crosstab結果的順序:
pd.crosstab(df['col1'], df['col2'])
我希望能夠按以下方式排序:
好吧,如果你提供了一個數據示例,那么給你一個解決方案會更容易,因為它可以相應地變化很多。 我將嘗試在下面構建案例場景和可能的解決方案。
如果我們采用示例數據和交叉表:
a = np.array(['foo', 'foo', 'foo', 'foo', 'bar', 'bar',
'bar', 'bar', 'foo', 'foo', 'foo'], dtype=object)
c = np.array(['dull', 'dull', 'shiny', 'dull', 'dull', 'weird',
'shiny', 'dull', 'shiny', 'shiny', 'shiny'], dtype=object)
CT = pd.crosstab(a, c, rownames=['a'], colnames=['c'])
CT
我們有以下輸出:
這是一個常規的數據幀對象,它只是“交叉”或更好,但相應地“可樞轉”。
你想表明:
所以讓我們從“1”開始:
有不同的方法可以做到這一點,一個簡單的解決方案是顯示相同的數據框對象與布爾值的奇異情況;
[CT == 1]
但是,在大型數據幀的情況下,該格式可能不是您所希望的。
您可以打印正面案例,或列出/追加它們,一個簡單的例子是:
for col in CT.columns:
for index in CT.index:
if CT.loc[index,col] == 1:
print (index,col,'singular')
輸出:
('bar', 'shiny', 'singular')
('bar', 'weird', 'singular')
第二項/願望更復雜。 您想以更高的價格訂購。 但可能存在分歧。 與一組索引相關聯的一列中的較高值很可能從第二列開始按順序分叉(也在相同索引中關聯)。
因此,您可以選擇按一個特定列排序:
CT.sort_values('column_name', ascending=False)
或者,您可以定義要訂購的指標(行平均值)並相應地進行排序。
希望有所幫助!
df_stack = pd.DataFrame({'Country':['USA','USA','MEX','IND','UK','UK','UK'],
'Region':['Americas',np.nan,np.nan,'Asia','Europe',np.nan,np.nan],
'Flower':['Rose','Rose','Lily','Orchid','Dandelion','Dandelion','Dandelion'],
'Animal':['Bison',np.nan,'Golden Eagle','Tiger','Lion','Lion',np.nan],
'Game':['Baseball','Baseball','soccer','hockey','cricket','cricket','cricket']})
print("-------Normal Dataframe------")
print(df_stack)
#created cross tab for getting animal regionwise
crosstab = pd.crosstab(df_stack.Region,df_stack.Animal)
print("-------Before Sorting Crosstab------")
print(crosstab)
#Apply sorting to specific column in this case 'Lion'
crosstab = crosstab.sort_values(['Lion'], ascending=False)
print("-------After Sorting Crosstab by Lion Column------")
print(crosstab)
-------Normal Dataframe------
Country Region Flower Animal Game
0 USA Americas Rose Bison Baseball
1 USA Americas Rose Bison Baseball
2 MEX Americas Lily Golden Eagle soccer
3 IND Asia Orchid Tiger hockey
4 UK Europe Dandelion Lion cricket
5 UK Europe Dandelion Lion cricket
6 UK Europe Dandelion Lion cricket
-------Before Sorting Crosstab------
Animal Bison Golden Eagle Lion Tiger
Region
Americas 2 1 0 0
Asia 0 0 0 1
Europe 0 0 3 0
-------After Sorting Crosstab by Lion Column------
Animal Bison Golden Eagle Lion Tiger
Region
Europe 0 0 3 0
Americas 2 1 0 0
Asia 0 0 0 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.