我需要洗掉大型資料庫中的重復項,但要洗掉的行必須基于使用 SQLite 或 Python Pandas 的層次結構。有沒有一種有效的方法來實作這一點?最好使用 python pandas 資料框,但 SQLite 也可以。
| ID | 文本 | 類別 |
|---|---|---|
| 1 | 文本 | 優先級 3 |
| 2 | 文本 | 優先級 1 |
| 3 | 文本 | 優先級 2 |
| 4 | 文本 2 | 優先級 3 |
| 5 | 文本 2 | 優先級 2 |
應該轉向這個:
| ID | 文本 | 類別 |
|---|---|---|
| 2 | 文本 | 優先級 1 |
| 5 | 文本 2 | 優先級 2 |
uj5u.com熱心網友回復:
嘗試這個:
df = df.sort_values(by=['Text','Category'], ascending=[True,True])
df.groupby('Text')['Category'].first().reset_index()
輸出:
| 指數 | 文本 | 類別 |
|---|---|---|
| 0 | 文本 | 優先級 1 |
| 1 | 文本 2 | 優先級 2 |
uj5u.com熱心網友回復:
與@Drakax 非常相似的方法,但使用drop_duplicates而不是groupbyandfirst
import pandas as pd
df = pd.DataFrame({
'ID': [1, 2, 3, 4, 5],
'Text': ['text', 'text', 'text', 'text 2', 'text 2'],
'Category': ['Priority 3', 'Priority 1', 'Priority 2', 'Priority 3', 'Priority 2'],
})
df.sort_values(['Text','Category']).drop_duplicates('Text')
uj5u.com熱心網友回復:
盡可能避免排序,使用 aCategorical定義優先級的順序并獲取每個組的最小值:
# priorities in order
priorities = ['Priority 1', 'Priority 2', 'Priority 3']
# set up Categorical
df['Category'] = pd.Categorical(df['Category'], priorities, ordered=True)
# min per group
df.loc[df.groupby('Text')['Category'].idxmin()]
輸出:
ID Text Category
1 2 text Priority 1
4 5 text 2 Priority 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490806.html
下一篇:SQLite查詢/子查詢的問題
