簡體   English   中英

刪除重復數據幀保持第一個或不為空值

[英]Drop Duplicates dataframe keep first or not empty value

我有一個數據框,只想刪除雙日期的名稱,並從雙打中取出第一個條目或值(如果已填充),例如:

01/02/19    Paolo   42
01/02/19    Paolo   9

第一個保留:01/02/19 Paolo 42。

01/02/19    Frank   
01/02/19    Frank   30

保留第二個:01/02/19 Frank 30。

使用drop_duplicates 時,它會刪除幾乎所有內容並只保留一小部分。

我的代碼如下所示:

import numpy as np
import pandas as pd

path = 'path'
filename = 'Dummy_File_Test.xlsx'
final_path = path + '/' + filename
print(final_path)
ws_name = 'Sheet1'

df = pd.read_excel(final_path, sheet_name=ws_name)
df.fillna('', inplace=True)
df.drop_duplicates(subset =['Date'], keep = 'first', inplace = True, ignore_index=False) 
print(df)

數據如下所示:

Date    Name    Revenue
01/01/19    Paolo   9
01/02/19    Paolo   42
01/02/19    Paolo   9
01/03/19    Paolo   10
01/04/19    Paolo   38
01/05/19    Paolo   
01/06/19    Paolo   
01/07/19    Paolo   41
01/08/19    Paolo   
01/09/19    Paolo   20
01/10/19    Paolo   
01/11/19    Paolo   3
01/12/19    Paolo   2
01/01/19    Frank   9
01/02/19    Frank   
01/02/19    Frank   30
01/03/19    Frank   10
01/04/19    Frank   
01/05/19    Frank   
01/06/19    Frank   
01/06/19    Frank   
01/07/19    Frank   
01/08/19    Frank   
01/08/19    Frank   
01/09/19    Frank   
01/10/19    Frank   
01/10/19    Frank   48
01/11/19    Frank   22
01/11/19    Frank   
01/12/19    Frank   47
01/01/19    Emilia  
01/02/19    Emilia  12
01/02/19    Emilia  15
01/03/19    Emilia  23
01/04/19    Emilia  25
01/05/19    Emilia  
01/05/19    Emilia  39
01/06/19    Emilia  30
01/06/19    Emilia  24
01/07/19    Emilia  4
01/08/19    Emilia  
01/08/19    Emilia  49
01/09/19    Emilia  24
01/10/19    Emilia  
01/11/19    Emilia  12
01/12/19    Emilia  33

輸出應如下所示:

Date    Name    Revenue
01/01/19    Paolo   9
01/02/19    Paolo   42
01/03/19    Paolo   10
01/04/19    Paolo   38
01/05/19    Paolo   
01/06/19    Paolo   
01/07/19    Paolo   41
01/08/19    Paolo   
01/09/19    Paolo   20
01/10/19    Paolo   
01/11/19    Paolo   3
01/12/19    Paolo   2
01/01/19    Frank   9
01/02/19    Frank   30
01/03/19    Frank   10
01/04/19    Frank   
01/05/19    Frank   
01/06/19    Frank   
01/07/19    Frank   
01/08/19    Frank   
01/09/19    Frank   
01/10/19    Frank   48
01/11/19    Frank   22
01/12/19    Frank   47
01/01/19    Emilia  
01/02/19    Emilia  12
01/03/19    Emilia  23
01/04/19    Emilia  25
01/05/19    Emilia  39
01/06/19    Emilia  30
01/07/19    Emilia  4
01/08/19    Emilia  49
01/09/19    Emilia  24
01/10/19    Emilia  
01/11/19    Emilia  12
01/12/19    Emilia  33

請注意列名{Date:date, Name:name, Revenue:values}因為我生成了自己的數據

將日期強制轉換為日期時間並將其(日期)設置為索引

df['Date']=pd.to_datetime(df['date'])
df.set_index(df['Date'], inplace=True)

對名稱、日期升序和值降序進行排序,以便最高值位於頂部

df.sort_values(by=['date','name','value'],ascending=[True, True, False], inplace=True)

Groupby 日期和名稱,同時刪除除第一個以外的所有其他內容

df.groupby([df.index.date, df.name])['value'].first()

如果想轉換回數據幀

df.groupby([df.index.date, df.name])['value'].first().to_frame()

輸出

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM