[英]How to append a new row in a dataframe by searching for an existing column value without iterating?
I'm trying to find the best way to create new rows for every 1 row when a certain value is contained in a column.当某个值包含在列中时,我试图找到为每 1 行创建新行的最佳方法。
Example Dataframe示例数据框
Index指数 | Person人 | Drink_Order Drink_Order |
---|---|---|
1 1 | Sam山姆 | Jack and Coke杰克和可乐 |
2 2 | John约翰 | Coke可乐 |
3 3 | Steve史蒂夫 | Dr. Pepper胡椒博士 |
I'd like to search the DataFrame for Jack and Coke, remove it and add 2 new records as Jack and Coke are 2 different drink sources.我想在 DataFrame 中搜索 Jack 和 Coke,将其删除并添加 2 个新记录,因为 Jack 和 Coke 是 2 个不同的饮料来源。
Index指数 | Person人 | Drink_Order Drink_Order |
---|---|---|
2 2 | John约翰 | Coke可乐 |
3 3 | Steve史蒂夫 | Dr. Pepper胡椒博士 |
4 4 | Sam山姆 | Jack Daniels杰克丹尼 |
5 5 | Sam山姆 | Coke可乐 |
Example Code that I want to replace as my understanding is you should never modify rows you are iterating我想替换的示例代码,因为我的理解是你永远不应该修改你正在迭代的行
for index, row in df.loc[df['Drink_Order'].str.contains('Jack and Coke')].iterrows():
df.loc[len(df)]=[row['Person'],'Jack Daniels']
df.loc[len(df)]=[row['Person'],'Coke']
df = df[df['Drink_Order']!= 'Jack and Coke']
Split using and.使用和拆分。 That will result in a list.这将导致一个列表。 Explode list to get each element in a list appear as an individual row.分解列表以获取列表中的每个元素显示为单独的行。 Then conditionally rename Jack to Jack Daniels然后有条件地将 Jack 重命名为 Jack Daniels
df= df.assign(Drink_Order=df['Drink_Order'].str.split('and')).explode('Drink_Order')
df['Drink_Order']=np.where(df['Drink_Order'].str.contains('Jack'),'Jack Daniels',df['Drink_Order'])
Index Person Drink_Order
0 1 Sam Jack Daniels
0 1 Sam Coke
1 2 John Coke
2 3 Steve Dr. Pepper
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.