在列中查找所有相同的元素并创建一个新文件

时间:2019-09-24 16:32:13

标签: python openpyxl

我有一个包含几列的Excel电子表格。列之一具有相似的元素值。我想写一个新的文本文件,其中包含Column A中所有与Column C中具有相似元素的元素。相似元素的一个示例是C列中包含USA的值。示例输出将输出到包含A列中的值的文本文件:

Column A   
1
2
5

例如:

Column A  Column B  Column C
1         3         USA
2         2         USA
3         5         China      
5         7         USA

我尝试使用openpyxl和pandas,但在逻辑上感到困惑:

 import openpyxl
 from openpyxl import *
 import os 

 wb = openpyxl.load_workbook('C:/Users/unknown/Desktop/filessed.xlsx')
 ws = wb.get_sheet_by_name('files sheet')
 #wb = load_workbook(filename_and_path, read_only=True)
 ws = wb.active

 for row in ws.iter_rows(min_row=1, min_col=1, max_row=6, max_col=4):
   for cell in row:
     print(cell.value)
   print()   

如何使用column C名称作为文本文件的名称写入新文件,以及如何在Column A中将元素写入Column C中?

1 个答案:

答案 0 :(得分:3)

给出以下数据框:

df = pd.DataFrame([[1, 3, 'USA'], [2, 2, 'USA'], [3, 5, 'China'], [4 ,7, 'USA']], columns =['A','B','C'])

   A  B      C
0  1  3    USA
1  2  2    USA
2  3  5  China
3  4  7    USA

使用grupbyapplyto_csv尝试以下单行代码:

df.groupby('C').apply(lambda row: row[['A']].to_csv(row.C.values[0]+'.csv', index=False))

这应该可以解决棘手的问题。
提示:如果您不想以csv格式保存文件,而是想以excel格式保存文件,请参见to_excel熊猫函数。

相反,如果您想稍后在文件上写入数据,则可以通过这种方式创建一个数据框,其中包含您感兴趣的数据:

df.groupby('C').apply(lambda row: row.A.values)
# output:
C
China          [3]
USA      [1, 2, 4]

或使用groupby.agg

df.groupby('C').agg({'A': lambda row: list(row.values)})

通过这种方式,您可以创建字典:

df.groupby('C').agg({'A': lambda row: list(row.values)}).to_dict()['A']
# output: {'China': [3], 'USA': [1, 2, 4]}