Найти все одинаковые элементы в столбце и создать новый файл - PullRequest
1 голос
/ 24 сентября 2019

У меня есть таблица Excel с несколькими столбцами.Один из столбцов имеет аналогичные значения элементов.Я хочу записать в новый текстовый файл, который содержит все элементы в Column A, которые имеют подобные элементы в Column C. Примером подобных элементов являются значения в столбце C, которые содержат США.Примером вывода будет текстовый файл, содержащий значения в столбце 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 Ответ

3 голосов
/ 24 сентября 2019

С учетом следующего кадра данных:

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

Попробуйте этот однострочный код, используя grupby , apply и to_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]}
...