gpt4 book ai didi

python - 根据条件重新索引数据框的行

转载 作者:行者123 更新时间:2023-12-05 01:50:07 26 4
gpt4 key购买 nike

数据框如下:

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

需要根据列表替换所有行或重新索引数据框开头的行。

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

下图显示了预期的输出:

img

最佳答案

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

然后使用 np.setdiff1d 查找剩余索引使用 np.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

关于python - 根据条件重新索引数据框的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73397036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com