鱼C论坛

 找回密码
 立即注册
查看: 1915|回复: 5

[已解决]求助关于python操作excel的用法

[复制链接]
发表于 2020-1-19 14:56:23 | 显示全部楼层 |阅读模式
30鱼币
现在有6种水果,分别含有不同的元素,有一种或者几种元素,如下图0119001


现在已经用openpyxl将所有元素提出并去重,但是有些元素含有几种水果,想实现如下面的统计(如图0119002),已经尝试很多次没有找出解决方法;


特求助,使用openpyxl或者pandas 实现均可,谢谢各位。
最佳答案
2020-1-19 14:56:24
  1. import pandas as pd
  2. import easygui as g

  3. excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
  4. df = pd.read_excel(excel_file, sheet_name=0)

  5. result = {}
  6. cols = ['类型', '含有元素']
  7. df_list = df[cols]

  8. for index, row in df_list.iterrows():
  9.     fruit = row['类型']
  10.     elements = row['含有元素'].split(',')

  11.     for elem in elements:
  12.         result[elem] = result.get(elem, list())
  13.         result[elem].append(fruit)

  14. # intialise data of lists.
  15. data = {'元素':[], '水果':[]}
  16. for key, value in result.items():
  17.     data['元素'].append(key)
  18.     data['水果'].append(','.join(value))

  19. new_df = pd.DataFrame(data)

  20. writer = pd.ExcelWriter(excel_file, engine='xlsxwriter')
  21. df.to_excel(writer, sheet_name='Sheet1', index=False)
  22. new_df.to_excel(writer, sheet_name='Sheet2', index=False)
  23. writer.save()
复制代码
0119001.JPG
0119002.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-19 14:56:24 | 显示全部楼层    本楼为最佳答案   
  1. import pandas as pd
  2. import easygui as g

  3. excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
  4. df = pd.read_excel(excel_file, sheet_name=0)

  5. result = {}
  6. cols = ['类型', '含有元素']
  7. df_list = df[cols]

  8. for index, row in df_list.iterrows():
  9.     fruit = row['类型']
  10.     elements = row['含有元素'].split(',')

  11.     for elem in elements:
  12.         result[elem] = result.get(elem, list())
  13.         result[elem].append(fruit)

  14. # intialise data of lists.
  15. data = {'元素':[], '水果':[]}
  16. for key, value in result.items():
  17.     data['元素'].append(key)
  18.     data['水果'].append(','.join(value))

  19. new_df = pd.DataFrame(data)

  20. writer = pd.ExcelWriter(excel_file, engine='xlsxwriter')
  21. df.to_excel(writer, sheet_name='Sheet1', index=False)
  22. new_df.to_excel(writer, sheet_name='Sheet2', index=False)
  23. writer.save()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-20 11:20:32 | 显示全部楼层
我的想法是输出一个字典,key为元素,value为水果(列表)
  1. import openpyxl
  2. wb = openpyxl.load_workbook("example.xlsx")
  3. dic = {}
  4. ws = wb['Sheet1']
  5. max_row =ws.max_row
  6. for row in range(2,max_row+1):
  7.     elements = ws['B'+str(row)].value
  8.     element_list =list(elements.replace(',',''))
  9.     #因为元素中有逗号,先将逗号用空字符替换,便于转换成列表
  10.     for element in element_list:
  11.         if element in dic.keys():
  12.             dic[element].append(ws['A'+str(row)].value)
  13.         else:
  14.             dic[element]=[]
  15.             dic[element].append(ws['A'+str(row)].value)
  16. print(dic)
复制代码
结果
{'a': ['苹果', '橘子', '山楂'], 't': ['香蕉', '橘子'], 'g': ['橘子', '梨'], 'b': ['橘子', '梨', '火龙果'], 'y': ['梨'], 'h': ['火龙果', '山楂'], 'n': ['山楂']}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-20 11:46:35 From FishC Mobile | 显示全部楼层
EthanHsiung 发表于 2020-1-20 11:20
我的想法是输出一个字典,key为元素,value为水果(列表)
结果
{'a': ['苹果', '橘子', '山楂'], 't': [ ...

这不是已经实现???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-20 15:09:20 | 显示全部楼层
用0和1表示吧,例如:
        a        b        c
苹果        1        0        0
香蕉        1        1        0
橘子        0        0        1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-20 15:23:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表