我有一個看起來像的資料框。
----------- -------
| A | B |
----------- -------
| 1 | 1 |
| 2 | 2 |
| 5 | 3 |
| 20 | 4 |
| 25 | 3 |
| 123 | 5 |
| 125 | 6 |
----------- -------
我想A根據范圍定義的范圍與 column 中的值之和對列進行分類B。然后將其饋送到 seaborn 以生成熱圖。
--------- ------ ------- ------- ------- ------- ------- ------- ------- ------- --------
| | 0-10 | 11-20 | 21-30 | 31-40 | 41-50 | 51-60 | 61-70 | 71-80 | 81-90 | 91-100 |
--------- ------ ------- ------- ------- ------- ------- ------- ------- ------- --------
| 0-100 | 6 | 4 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 101-200 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 201-300 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 301-400 | 0 | 0 | 11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 401-500 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------- ------ ------- ------- ------- ------- ------- ------- ------- ------- --------
通過回圈資料并生成陣列來解決它的一種方法。如果有的話,我正在尋找一種熊貓方式。
我嘗試像這樣使用seaborn.heatmap解決:
df.groupby([pd.cut(df.A, bins=[x for x in range(0,1001,100)], include_lowest=True, right=False),
pd.cut(df.A, bins=[x for x in range(0,101,10)], include_lowest=True, right=False)])
.B.sum().unstack()
但這只是第一個0-100 B值的組。忽略剩下的。
uj5u.com熱心網友回復:
在您的解決方案中,range對于range(0,101,10)like使用最大101,因此A列中不匹配的值更大 like 100- 輸出是NaNs,因此在聚合 sum get 之后0。
編輯:
#create helper column with integer and modulo division
df['A1'] = df.A % 100
bins1= range(0,df.A.max() // 100 * 100 101, 100)
bins2= range(0,df.A1.max() // 10 * 10 11, 10)
labels1 = [f'{i}-{j}' if i == 0 else f'{i 1}-{j}' for i, j in zip(bins1[:-1], bins1[1:])]
labels2 = [f'{i}-{j}' if i == 0 else f'{i 1}-{j}' for i, j in zip(bins2[:-1], bins2[1:])]
df['a'] = pd.cut(df.A, bins=bins1,labels=labels1, include_lowest=True, right=True)
df['b'] = pd.cut(df.A1, bins=bins2,labels=labels2, include_lowest=True, right=True)
print (df)
A B A1 a b
0 1 1 1 0-100 0-10
1 2 2 2 0-100 0-10
2 5 3 5 0-100 0-10
3 20 4 20 0-100 11-20
4 25 3 25 0-100 21-30
5 123 5 23 101-200 21-30
6 125 6 25 101-200 21-30
df1 = df.pivot_table(index='a', columns='b', values='B', aggfunc='sum')
print (df1)
b 0-10 11-20 21-30
a
0-100 6 4 3
101-200 0 0 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420936.html
標籤:
上一篇:過濾器組包含特定值
