我有一个如下所示的数据框:
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
关于python - 如果值在列表中,则 Pandas Dataframe 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58659765/