从一个工作表的输入xlxs中,我正在收集挖掘数据并在同一工作簿中创建填充其他工作表。工作表包含多个列,并且在每个工作表上各不相同,因此没有固定数量的列。我想搜索选择列与标题=用户名,匹配值和复制创建一个新的列与共同的匹配值。例如:
<表类>
UserE
UserF
UserG
UserH
UserI
tbody><<tr>Group1 Group2 GroupA Group1 GroupC GroupA GroupA Group2 GroupA GroupA Group3 GroupC GroupB Group2 Group5 Group2 GroupF GroupF GroupG Group2 表类>
您可以使用下面的代码完成此操作。请注意,程序将input.xlsx
文件Sheet1
tab读入数据帧,假设第一行是标题,然后找到每列中常见的文本,并在右侧添加一列(最后一列之后的一个单元格),其中包含单词match
,然后将常见字符串一个放在另一个下面。它不会触摸/替换其他标签可能出现在excel表。如果没有公共字符串,它将仅以match
作为列标题,并且下面没有数据。
import pandas as pd
from openpyxl import load_workbook
# Read data
df = pd.read_excel('input.xlsx', sheet_name='Sheet1')
#For each column, find items that are common across all those columns
for i in range(df.shape[1]):
if i == 0:
match = set(df.iloc[:,i])
else:
match = match & set(df.iloc[:,i])
#Open using load_workbook so that no data is overwritten
wb=load_workbook('input.xlsx')
ws=wb['Sheet1']
ws.cell(row=1,column=df.shape[1]+1).value = "match" #Add header row
for r_idx in range(len(match)): #Add each item to last column below "match"
ws.cell(row=r_idx+2, column=df.shape[1]+1).value=list(match)[r_idx]
#for c_idex, col in enumerate()
wb.save('input.xlsx')