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 或仅适用于具有“VISIBLE”的重复项
我无法理解它。它出什么问题了? 分组项的当前输出为 NaN。
数据示例:
当尝试使用函数时,我得到了奇怪的结果,希望看到输出:
非常感谢!还有一杯啤酒给你!
最佳答案
您可以.groupby
并将组中的项目加入
到一个字符串。从那里使用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
关于python - 在第 1 列中查找精确的单元格值并将第 2 列的值连接到新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65375447/