我正在尝试使用Python 3.6.1,Pycharm 2017.1.3。,Openpyxl 2.4.7和Excel 2016来实现这一目标。
这是我的数据集:
Sheet1:
productnum|keyword1|keyword2
0001 |red |big
0001 |blue |red
0001 |large |blue
0002 |green |
0002 |small |blue
我想最终得到这个:
productnum|keyword1 |keyword2 |combinedkeywords
0001 |red;blue;large|big;red;blue|red;blue;large;big
0002 |green;small |blue |green;small;blue
我被告知DefaultDict(List)是完成此任务的好方法。这是我到目前为止所做的尝试:
for rownum in range(1,maxRow):
partnum = str(sheet1.cell(row=rownum, column=1).value)
keyword1 = str(sheet1.cell(row=rownum, column=3).value)
s = [(partnum,keyword1)]
print(s)
d = defaultdict(list)
for k, v in s:
d[k].append(v)
但我最终得到的并不完全是我需要的东西,如:
[('0001', 'red']
[('0001', 'blue']
等等。
有没有人对如何使用defaultdict(list)完成此操作有任何建议?提前致谢!
答案 0 :(得分:0)
这不是您对defaultdict
的问题的直接回答,而是另一种解决方法。您可以使用pandas
来处理数据。以下代码:
import pandas as pd
# Read excel table into pandas dataframe
df = pd.read_excel('workbook.xlsx')
# Aggregate unique keywords for each product number
func = lambda x: tuple(x.unique())
df2 = df.groupby('productnum').agg(func)
# Create column for all keyword combinations
func = lambda x: tuple(set(x.keyword1) | set(x.keyword2))
df2['combinedkeywords'] = df2.apply(func, axis=1)
# Print result dataframe to screen and also to excel file
print(df2)
df2.to_excel('workbook2.xlsx')
将此产生为输出:
keyword1 keyword2 combinedkeywords
productnum
1 (red, blue, large) (big, red, blue) (red, large, blue, big)
2 (green, small) (nan, blue) (nan, green, blue, small)