根据条件复制行

2024-04-24 10:50:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经阅读了至少10个非常相似的问题的答案,但没有一个是有效的和/或完全是我需要的。我有一个很大的ish数据框,需要它来查找特定的行并创建整行的副本。例如:

之前:

index    price   quantity    flavor    
0        1.45    6           vanilla   
1        1.85    3           berry   
2        2.25    2           double chocolate

之后:

index    price   quantity    flavor    
0        1.45    6           vanilla   
1        1.85    3           berry   
2        2.25    2           double chocolate
3        1.85    3           berry

根据我对熊猫和Python的了解,似乎有效的方法是:

df.loc[df.index.max() + 1,:] = df.loc[df['flavor'] == 'berry'].values

但是我得到这个错误:

ValueError: setting an array element with a sequence.

请记住,我不知道“berry”可能在数据库中的什么位置(除了“flavor”列中)。(编辑添加)也可能有一个以上的“浆果”,所以它需要找到他们所有。你知道吗

有什么想法?你知道吗


Tags: 数据方法答案dfindex副本priceloc
2条回答

所以,这可能就是你想要的:

import pandas as pd
df = pd.DataFrame({"quantity":[6, 3, 2], "flavor":["vanilla", "berry", "double chocolate"], "price":[1.45, 1.85, 2.25]})
df = df.append(df.loc[df['flavor'] == 'berry']).reset_index()
df
#output
    flavor  price   quantity
0   vanilla 1.45    6
1   berry   1.85    3
2   double chocolate    2.25    2
3   berry   1.85    3

只要使用append并重置索引就可以了。你知道吗

我给出了一个与@user2906838建议略有不同的答案。因为数据帧中可能有多个“berry”,所以我创建了一个新的数据帧,然后将它们串联起来:

import pandas as pd
df = pd.DataFrame({'quantity':[6, 3, 2], 'flavor':['vanilla', 'berry', 'double chocolate'], 'price':[1.45, 1.85, 2.25]})
df_flavor = pd.DataFrame
df_flavor.append(df.loc[df['flavor'] == 'berry'], sort = False)
df = pd.concat([df, df_flavor], sort = False, ignore_index = True)

这工作很好,但如果有其他的解决办法,我很乐意听到!你知道吗

相关问题 更多 >