簡體   English   中英

根據條件重新索引 aa dataframe 的行

[英]Reindex rows of a a dataframe based on condition

具有如下數據框:

data = {'number':[4,3,3,3,3,3,3,3,3,3,4,5],'name':['L6','L6','L6','L6','L6','L8','L8','L8','L9','L9','L8','L9'],
    'product1':['B','C','A','A','A','A','B','B','D','D','D','E'],
    'product2':['D','A','B','Z','C','G','G','T','E','W','T','Q']}
 
df = pd.DataFrame(data)
df

需要基於列表替換所有行或重新索引 dataframe 開頭的行。

lst = [(3,'L6','A'),(3,'L8','B'),(3,'L9','D')]

下圖顯示了預期的 output:

圖像

使用pd.MultiIndexget_indexer_for獲取 my_list 中值的索引。

然后使用np.setdiff1dnp.arange(len(df))找到剩余的索引,並找到第一個索引

然后使用np.concatenate將它們組合起來以獲得所需的索引順序

然后用新順序reindex df 。

my_list = [(3,'L6','A'),(3,'L8','B'),(3,'L9',D)] #Don't use 'list' for name
mi = pd.MultiIndex.from_arrays([df['number'], df['name'], df['product1']])
first_rows_indexes = mi.get_indexer_for(my_list)
remaining_indexes = np.setdiff1d(np.arange(len(df)), first_rows_indexes)
df = df.reindex(np.concatenate([first_rows_indexes, remaining_indexes]))

打印(df):

    number name product1 product2
2        3   L6        A        B
3        3   L6        A        Z
4        3   L6        A        C
6        3   L8        B        G
7        3   L8        B        T
8        3   L9        D        E
9        3   L9        D        W
0        4   L6        B        D
1        3   L6        C        A
5        3   L8        A        G
10       4   L8        D        T
11       5   L9        E        Q

從元組列表中創建一個 dataframe,然后與給定的 dataframe 進行外部合並,以根據 lst 中的鍵順序自動排序

order = pd.DataFrame(lst, columns=['number', 'name', 'product1'])
order.merge(df, how='outer', sort=False)

    number name product1 product2
0        3   L6        A        B
1        3   L6        A        Z
2        3   L6        A        C
3        3   L8        B        G
4        3   L8        B        T
5        3   L9        D        E
6        3   L9        D        W
7        4   L6        B        D
8        3   L6        C        A
9        3   L8        A        G
10       4   L8        D        T
11       5   L9        E        Q

暫無
暫無

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

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