Найдите идентификатор строки для уникального значения и напечатайте всю строку (Python / Pandas) - PullRequest
0 голосов
/ 06 декабря 2018

Я нахожусь в процессе создания скрипта Python, который проверяет, существуют ли значения в столбце из файла CSV, но нет в другом.В настоящее время у меня есть эта функциональность, работающая как задумано, и скрипт возвращает уникальные значения из столбца в файле CSV.На следующем шаге скрипт должен вернуть всю строку этого уникального значения.Так, например, если пользователь с идентификатором «A53456» существует в строке 15 в файле CSV, я хотел бы, чтобы скрипт пришел и распечатал всю строку номер 15. Есть идеи, как это реализовать?Спасибо.

import pandas as pd

#create dataframes
dataframe_server_permissions = pd.read_csv("\server_permissions.csv")
dataframe_database_permissions = pd.read_csv("\database_permissions.csv")

#create list from column values 
database_permissions_list=dataframe_database_permissions['Rights'].tolist()   
server_permissions_list=dataframe_server_permissions['Permissions'].tolist()

#remove the duplicate values from the list
server_permissions_list_duplicates_removed = list(set(server_permissions_list))
database_permissions_list_duplicates_removed = list(set(database_permissions_list))

#identify permissions that exist in one file but not the other
set1 = set(database_permissions_list_duplicates_removed)
set2 = set(server_permissions_list_duplicates_removed)
permissions_in_server_but_not_database = list(sorted(set2 - set1))
print(permissions_in_server_but_not_database)

#output the values from the comparison 
number_of_records_from_permissions_in_server_but_not_database = len(permissions_in_server_but_not_database)
print(number_of_records_from_permissions_in_server_but_not_database)
i = 0
while i < number_of_records_from_permissions_in_server_but_not_database:
print(permissions_in_server_but_not_database[i])
i += 1

1 Ответ

0 голосов
/ 06 декабря 2018

Вот пример, без циклов, используя только pandas и numpy (намного быстрее, чем циклы)

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[1,2,3,1,22,3], 'B':[1,2,33,1,2,3]})

    A   B
0   1   1
1   2   2
2   3  33
3   1   1
4  22   2
5   3   3

# find the common values, so we can later exclude them 
# and get only unique values
common_values = np.intersect1d(df['A'].unique(), df['B'].unique())
print(common_values)
[1 2 3]

# '~' is a NOT operator
# unique values from column 'A':
df[~df['A'].isin(common_values)]

    A   B
4   22  2

# unique values from column 'B':
df[~df['B'].isin(common_values)]

    A   B
2   3   33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...