>我有一个电子表格,其中用户名在一列中,他们的设备在另一列("B"和"E")。这是工作表中编造的示例:
A B C E F
CI Number Username Department Equipment Model
1423 Mike Brandt Sales iPhone 8
5345 Mike Brandt Sales iPad Air
8473 Christina HR iPhone 6s
8474 Christina HR Laptop T500
0983 Christina HR iPhone 8
我的想法是遍历 B 中的每一行,如果是同一个用户,则检查它们是否具有相同的设备。
Mike Brandt --> iPhone
Mike Brandt --> iPad
这将是错误的,因为迈克有iPhone和iPad。然而与克里斯蒂娜
Christina --> iPhone
Christina --> Laptop
Christina --> iPhone
将为真,并在单元格 G 中放置一个"*"以标记用户具有重复的项目。
这是我的工作,我们有时必须手动阅读 excel 工作表,并查看用户在收到新设备之前是否没有退回他们的设备。(可能有多达 1000 个用户,所以这就是我尝试它的原因)我无法弄清楚我必须做什么才能比较用户并查看他们是否拥有两个相同的设备。
import openpyxl
path = '/home/steven/Documents/Python/Arbejde/test.xlsx'
# Open Workbook & Worksheet
wb = openpyxl.load_workbook(path)
ws = wb.get_active_sheet()
def clean_list(ws):
#Loop over e rows, and check each cell for a match.
for row in range(2, ws.max_row+1):
for column in "BE":
cell_name = "{}{}".format(column, row)
if ws[cell_name].value == ws[cell_name].value:
#Check code should be here
print(clean_list(ws))
我预计输出是这样的:
8473 Christina HR iPhone 6s *
8474 Christina HR Laptop T500
0983 Christina HR iPhone 8
解决方案:
import pandas as pd
path = '/home/steven/Documents/Python/Arbejde/Altudstyr.xlsx'
xlsx = pd.ExcelFile(path)
df = pd.read_excel(xlsx, 'Ark1') # Reads the excel_sheet
#If dup, print a "*" to column Duplet.
df['Duplet'] = df.duplicated(['End user', 'Standard']).map({True: '*', False: ''})
df.to_excel('Sorted_List.xlsx')
作为替代方案,您可以使用pandas
包:
import pandas as pd
df = pd.read_excel('test.xlsx')
mask = df.duplicated(subset=['Username', 'Equipment'])
users = df.loc[mask, 'Username']
result = df[df['Username'].isin(users)]
print(result)
作为打印输出给出:
CI Number Username Department Equipment Model
2 8473 Christina HR iPhone 6s
3 8474 Christina HR Laptop T500
4 983 Christina HR iPhone 8
我建议做一个映射,比如用户使用可以删除重复项的设备进行一组映射。稍后,您可以使用该集合编写单独的行。