我只有一個像這樣的 csv 格式的表格
| 日期 | 公司1 | 公司2 | 公司3 |
|---|---|---|---|
| 01.01.2020 | 1,01 | 0,9 | 1 |
| 02.01.2020 | 0,9 | 2,2 | 2 |
| ... | ... | ... | ... |
| 24.10.2020 | 1,02 | 1,01 | 1,03 |
現在我的目標是按降序對每一行進行排序。所以我終于得到了下表:
| 日期 | 1 | 2 | 3 |
|---|---|---|---|
| 01.01.2020 | 公司1 | 公司3 | 公司2 |
| 02.01.2020 | 公司2 | 公司3 | 公司1 |
| ... | ... | ... | ... |
| 24.10.2020 | 公司3 | 公司1 | 公司2 |
他們是用python做某事的簡單方法嗎?
uj5u.com熱心網友回復:
您可以使用 reshape using melt,sort_values并創建一個輔助列,然后使用輔助列作為列名恢復原始形狀:
(df.melt(id_vars='Date')
.sort_values(by='value', ascending=False)
.assign(col=lambda d: d.groupby('Date').cumcount().add(1))
.pivot(index='Date', columns='col', values='variable')
)
輸出:
col 1 2 3
Date
01.01.2020 Company1 Company3 Company2
02.01.2020 Company2 Company3 Company1
24.10.2020 Company3 Company1 Company2
uj5u.com熱心網友回復:
一種方法使用 np.argsort
# get column names
columns = df.columns[1:].to_numpy()
# get sorted indices
indices = np.argsort(df.iloc[:, 1:] * -1, axis=1)
# create new DataFrame
res = pd.concat([df["Date"], pd.DataFrame(columns[indices], columns=range(1, 4))], axis=1)
print(res)
輸出
Date 1 2 3
0 01.01.2020 Company1 Company3 Company2
1 02.01.2020 Company2 Company3 Company1
2 24.10.2020 Company3 Company1 Company2
uj5u.com熱心網友回復:
您可以.apply()在每一行上使用以降序對值進行排序并獲取排序序列的索引(即列標簽):
df2 = (df.set_index('Date')[['Company1', 'Company2', 'Company3']]
.replace(r',', r'.', regex=True)
.astype(float)
.apply(lambda x: x.sort_values(ascending=False).index.tolist(), axis=1, result_type='expand')
.pipe(lambda x: x.set_axis(x.columns 1, axis=1))
.reset_index()
)
結果:
print(df2)
Date 1 2 3
0 01.01.2020 Company1 Company3 Company2
1 02.01.2020 Company2 Company3 Company1
2 24.10.2020 Company3 Company1 Company2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334940.html
上一篇:SimpleITK無法顯示影像
