鱼C论坛

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

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

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


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


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

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

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

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

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

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

new_df = pd.DataFrame(data)

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

使用道具 举报

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

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

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

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

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

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

new_df = pd.DataFrame(data)

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

使用道具 举报

发表于 2020-1-20 11:20:32 | 显示全部楼层
我的想法是输出一个字典,key为元素,value为水果(列表)
import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
dic = {}
ws = wb['Sheet1']
max_row =ws.max_row
for row in range(2,max_row+1):
    elements = ws['B'+str(row)].value
    element_list =list(elements.replace(',',''))
    #因为元素中有逗号,先将逗号用空字符替换,便于转换成列表
    for element in element_list:
        if element in dic.keys():
            dic[element].append(ws['A'+str(row)].value)
        else:
            dic[element]=[]
            dic[element].append(ws['A'+str(row)].value)
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-11-25 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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