我有一个如下所示的数据框:
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
