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

标签 python pandas list dataframe

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

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 - 它创建了由 01 填充的新关卡,因此必要 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/

相关文章:

python - Pandas 根据两个数据框计算百分比

c - 我怎样才能只计算列表中的某些项目?

python - 在 Python 中反转列表

python - 如何最好地使用 Python 列表?

python - 在Python中合并时间序列数据帧

python - Django 错误 : relation "users_user" does not exist

python - 使用 Pandas 在 csv 中获取时间戳

python - Pandas 数据帧 : Reduce Diagonal Sub-Frame to Single Row or How to Fill a Dataframe Piece by Piece

python - 在 Python 中按比较值排序

Pandas 基于两个或多个二进制列融化数据