在 column1 中查找确切的单元格值并将 column2 的值连接到新列中
Posted
技术标签:
【中文标题】在 column1 中查找确切的单元格值并将 column2 的值连接到新列中【英文标题】:Find exact cell-values in column1 and join values of column2 into new column 【发布时间】:2021-03-30 04:39:48 【问题描述】:import pandas as pd
import numpy as np
df = pd.read_csv ('input.csv')
df.head()
df['visibility'] = np.where(df['sku']== df['parent-sku'], 'visible', 'search') #add column if same sku in parent-sku
combo4 = df.groupby(['parent-sku'])['sku'].apply(', '.join)
data = print(combo4)
df['grouped items'] = np.where(df['sku']== df['parent-sku'], data, '') #format(combo2)
df.to_csv('output.csv', index=False)
所以,我的目标是检查所有 CSV 文件, 在“PARENT-SKU”列中检查行中的重复值,(例如,4 项相同); 从旁边的 SKU 列中获取值(每个都是唯一的); 用逗号合并并附加到新的 GROUPED 列 - 仅适用于第一次重复 PARENT-SKU 或仅具有“可见”的那个
我无法理解它。它出什么问题了? 分组项的当前输出为 NaN。
数据示例:
Parent SKU | SKU | VISIBLE |
---|---|---|
A | A1 | VISIBLE |
A | A2 | SEARCH |
A | A3 | SEARCH |
B | B1 | VISIBLE |
B | B2 | SEARCH |
我得到了非常糟糕的结果,当尝试使用函数时,我很想看到输出:
Parent SKU | SKU | VISIBLE | GROUPED ITEMS |
---|---|---|---|
A | A1 | VISIBLE | A1,A2,A3 |
A | A2 | SEARCH | |
A | A3 | SEARCH | |
B | B1 | VISIBLE | B1,B2 |
B | B2 | SEARCH |
非常感谢!给你一杯啤酒!
【问题讨论】:
根据您的评论,尝试我更新的答案。我在我的手机上,所以还没有测试。 【参考方案1】:您可以将.groupby
和join
组中的项目转换为字符串。从那里使用mask
来识别duplicated()
行,您可以将其更改为''
。
根据您的评论,您还可以使用 replace
排除某些单词,但您必须使用一些正则表达式来替换逗号,具体取决于前面还是后面,但您不希望替换字体和反逗号。否则,某些项目不会用逗号分隔。此正则表达式 (,)?
向后查找可选逗号:
srs = df.groupby('Parent SKU')['SKU'].transform(','.join)
df['GROUPED ITEMS'] = (srs.replace(['simple(,)?', '(,)?simple'], '', regex=True)
.mask(srs.duplicated(), ''))
df
或者如果你想要列表格式,那么你可以使用str.split(',')
:
srs = df.groupby('Parent SKU')['SKU'].transform(','.join)
df['GROUPED ITEMS'] = (srs.replace(['simple(,)?', '(,)?simple'], '', regex=True)
.mask(srs.duplicated(), ''))
df
Out[1]:
Parent SKU SKU VISIBLE GROUPED ITEMS
0 A A1 VISIBLE A1,A3
1 A simple SEARCH
2 A A3 SEARCH
3 B B1 VISIBLE B1,B2
4 B B2 SEARCH
【讨论】:
哇,这真是太棒了。如果Column3(产品类型)中有“简单”,也许你知道如何跳过GROUPED ITEMS - 否则,如果产品类型很简单,它会为它添加分组项目SKU......不太了解python跨度> 哇,python 好强大!感谢您的帮助【参考方案2】:这是一种方法。
my_dict =
my_list = []
for val in df['Parent SKU'].values:
my_dict[val] = []
for val in df['SKU'].values:
if val[0] in my_dict:
my_dict[val[0]].append(val)
for val in df['SKU'].values:
if val[1] == '1':
my_list.append(my_dict[val[0]])
else:
my_list.append('')
df['GROUPED ITEMS'] = my_list
输出:
parentSKU SKU visible GROUPED ITEMS
0 A A1 visible [A1, A2, A3]
1 A A2 search
2 A A3 search
3 B B1 visible [B1, B2]
4 B B2 search
【讨论】:
以上是关于在 column1 中查找确切的单元格值并将 column2 的值连接到新列中的主要内容,如果未能解决你的问题,请参考以下文章