Skip to main content
 首页 » 编程设计

python之如果值在列表中,则 Pandas Dataframe 中的重复行

2024年08月12日29jpfss

我有一个如下所示的数据框:

fruit   cost 
apples  2 
oranges 3 
bananas 5 
grapefruit  1 

我想传递一个包含指定“水果”列值的列表,并使用它来复制数据框中的那些行。例如,重复的 fruits = ['apples', 'oranges']。

然后应将这些行复制回数据框中,并带有一个额外的列,表示它们是一个副本(可以是二进制 1/0)。

请您参考如下方法:

使用Series.isin获取匹配行和复制使用 DataFrame.append使用 DataFrame.assign 到原始数据对于指示列:

duplicated  = ['apples', 'oranges'] 
df1 = df[df['fruit'].isin(duplicated)].assign(new=1) 
df = df.assign(new=0).append(df1, ignore_index=True) 
print (df) 
        fruit  cost  new 
0      apples     2    0 
1     oranges     3    0 
2     bananas     5    0 
3  grapefruit     1    0 
4      apples     2    1 
5     oranges     3    1 

另一个想法是在 concat 中使用参数 keys - 它创建了由 0 和 1 填充的新关卡,因此很有必要 DataFrame.reset_index按第一级为列转换此级别:

df = (pd.concat([df, df1], keys=(0,1)) 
       .rename_axis(('new', None)) 
       .reset_index(level=0) 
       .reset_index(drop=True)) 
print (df) 
   new       fruit  cost 
0    0      apples     2 
1    0     oranges     3 
2    0     bananas     5 
3    0  grapefruit     1 
4    1      apples     2 
5    1     oranges     3