資料框是這樣的;
| 簇 | 型別 1 | 型別 2 | 型別 3 | 型別 4 | 型別 5 |
|---|---|---|---|---|---|
| 1 | 10 | 31 | 5 | 3 | 23 |
| 2 | 53 | 12 | 6 | 9 | 7 |
| 3 | 44 | 73 | 1 | 9 | 13 |
作為輸出,我想要這樣的東西,所以我可以看到每個集群中的主要流派。
| 簇 | 第一 | 第二 | 第三 |
|---|---|---|---|
| 1 | 型別 2 | 型別 5 | 型別 1 |
| 2 | 型別 1 | 型別 2 | 型別 4 |
| 3 | 型別 2 | 型別 1 | 型別 5 |
我想在圖表中顯示每個集群的前 3 個“流派”,我不知道如何為一行而不是列執行此操作。這里有人熟悉嗎?
uj5u.com熱心網友回復:
您可以使用numpy.argsortondf.values并axis=1選擇三個最大的并使用 df.columns 獲取列名:
import pandas as pd
import numpy as np
df = df.set_index('Cluster')
res = pd.DataFrame(df.columns[np.argsort(-1*df.values,axis=1)[:, :3]],
columns=['1st', '2nd',' 3rd'])
print(res)
輸出:
1st 2nd 3rd
0 Genre 2 Genre 5 Genre 1
1 Genre 1 Genre 2 Genre 4
2 Genre 2 Genre 1 Genre 5
uj5u.com熱心網友回復:
您可以將nlargest與 apply 用于下面代碼中給出的每一行來解決此問題,
>>> import pandas as pd
>>>
>>> dictA = {'genre1': [10,20,56,2,30,44],'genre2': [ 9,70,96,7,3,54],'genre3': [ 12,10,16,23,39,4],'genre4': [ 40,29,26,15,43,14]}
>>>
... dfA = pd.DataFrame(dictA)
>>> dfA.index.name = 'cluster'
>>>
... dfA.reset_index(inplace=True)
>>>
>>> dfA
cluster genre1 genre2 genre3 genre4
0 0 10 9 12 40
1 1 20 70 10 29
2 2 56 96 16 26
3 3 2 7 23 15
4 4 30 3 39 43
5 5 44 54 4 14
>>> df1 = (dfA.set_index('cluster')
... .apply(lambda x: pd.Series(x.nlargest(3).index), axis=1)
... .reset_index())
>>> df1
cluster 0 1 2
0 0 genre4 genre3 genre1
1 1 genre2 genre4 genre1
2 2 genre2 genre1 genre4
3 3 genre3 genre4 genre2
4 4 genre4 genre3 genre1
5 5 genre2 genre1 genre4
改編自這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496125.html
上一篇:Pandas函式基于單列創建多列
