Строка, объединяющая строки в кадре данных? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть телефонный справочник, в котором отдел, название, адрес электронной почты и добавочный номер хранятся в отдельных строках. Общее имя - это имя и фамилия. Я объединил Имя и Фамилию в качестве Ключа и хотел бы объединить строки, в которых вы бы в итоге получили одну строку с Именем, Заголовком, Отделом, Электронной почтой и Расширением.

Я попытался создать словарь для каждого ключа, но мне не повезло с фактическим слиянием. Вот где я нахожусь на кодировании. Сначала мне пришлось очистить данные, чтобы получить соответствующие столбцы.

таблица выглядит следующим образом:

LastName  FirstName  Department Title   Extension Email           Key
Doe       Jane       HR         Officer 0000                      Jane Doe
Doe       Jane       HR         Officer           jdoe@email.com  Jane Doe
df = pd.read_excel("Directory.xlsx")
df = df.drop(columns = ["group_name","editable","id","contact_type","id2","account_id","server_uuid","picture",
             "dial_prefix","name","label","id3","transfer_name","value","key","primary","label4","id5",
             "type","display","group_name6"])

df = df.rename(index = str, columns = {"last_name":"Last Name","first_name":"First Name","location":"Department",
               "title":"Title","dial":"Extension","address":"Email"})

df["Key"] = df["First Name"].map(str) + " " + df["Last Name"].map(str)
LastName FirstName Department Title   Extension Email          Key  
Doe      Jane      HR         Officer 0000      jdoe@email.com Jane Doe

1 Ответ

1 голос
/ 05 апреля 2019

Сначала мы используем DataFrame.replace, чтобы заменить пробелы на NaN.Затем используйте DataFrame.groupby и примените fillna с методами backfill и forwardfill, чтобы заполнить пустые места.Наконец, мы можем использовать drop_duplicates, чтобы получить нужную строку.

df['Key'] = df['FirstName'] + ' ' + df['LastName']
df.replace('', np.NaN, inplace=True)
df = df.groupby('Key').apply(lambda x: x.fillna(method='ffill').fillna(method='bfill')).drop_duplicates()

print(df)
  LastName FirstName Department    Title Extension           Email       Key
0      Doe      Jane         HR  Officer      0000  jdoe@email.com  Jane Doe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...