我有資料框
df = pd.DataFrame({'session_id': ['T01', 'T02', 'T03', 'T04', 'T05', 'T06', 'T07'],
'path': [array(['a', 'b', 'c'], dtype='<U1'),
array(['x', 'y', 'z'], dtype='<U1'),
array(['a', 'b', 'c'], dtype='<U1'),
array(['x', 'y', 'z'], dtype='<U1'),
array(['k'], dtype='<U1'),
array(['x', 'y', 'z'], dtype='<U1'),
array(['h', 'i'], dtype='<U1')],
'flag': [0, 1, 0, 0, 0, 1, 0],
'total_value': [0.02, 0.05, 0.02, 0.05, 0.001, 0.05, 0.03]})
像下面這張表
| session_id | path | flag | total_value |
| ---------- | -------------------- | ----- | ------------- |
| T01 | [a,b,c] | 0 | 0.020 |
| T02 | [x,y,z] | 1 | 0.050 |
| T03 | [a,b,c] | 0 | 0.020 |
| T04 | [x,y,z] | 0 | 0.050 |
| T05 | [k] | 0 | 0.001 |
| T06 | [x,y,z] | 1 | 0.050 |
| T07 | [h,i] | 0 | 0.030 |
我想按路徑、標志、total_value 和按 total_value desc 排序后的記錄數進行分組。最終結果選擇如下。
| path | flag | total_value | count |
| -------------------- | ----- | ------------- | ------- |
| [x,y,z] | 1 | 0.050 | 2 |
| [x,y,z] | 0 | 0.050 | 1 |
| [h,i] | 0 | 0.030 | 1 |
| [a,b,c] | 0 | 0.020 | 2 |
| [k] | 0 | 0.001 | 1 |
我嘗試使用
df.groupby(['path', 'flag', 'total_value']).count()
但會顯示錯誤
unhashable type: 'numpy.ndarray'
uj5u.com熱心網友回復:
該 groupby 的問題在于,正如錯誤訊息所說,np.ndarrays 是可變的,因此不可散列,因此不能用作索引。但是元組是可散列的,因此您可以將'path'列中的陣列轉換為元組以及groupby所需的列和使用count方法。
然后在操作之后,將'path'值轉換回np.arrays:
df['path'] = df['path'].apply(tuple)
out = df.groupby(['path', 'flag', 'total_value']).count().reset_index()
out['path'] = out['path'].apply(np.array)
輸出:
path flag total_value session_id
0 [a, b, c] 0 0.020 2
1 [h, i] 0 0.030 1
2 [k] 0 0.001 1
3 [x, y, z] 0 0.050 1
4 [x, y, z] 1 0.050 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409494.html
標籤:
