объединить похожие строки в один ряд в пандах [дубликаты]

1

У меня ниже Dataframe nbr

||Postal_Code|Borough|Neighborhood|
|0|M3A|North York|Parkwoods|
|1|M4A|North York|Victoria Village|
|2|M5A|Downtown Toronto|Harbourfront|
|3|M5A|Downtown Toronto|Regent Park|
|4|M6A|North York|Lawrence Heights|
|5|M6A|North York|Lawrence Manor|
|6|M7A|Queens Park|Queens Park|

Я хочу запустить код Python таким образом, чтобы строки 4 и 5 должны были объединиться в 1 строку и вернуть результат, как groupby ниже: (Я пробовал groupby и agg но они здесь не работают)

||Postal_Code|Borough|Neighborhood|
|0|M3A|North York|Parkwoods|
|1|M4A|North York|Victoria Village|
|2|M5A|Downtown Toronto|Harbourfront|
|3|M5A|Downtown Toronto|Regent Park|
|4|M6A|North York|Lawrence Heights , Lawrence Manor|
|5|M7A|Queens Park|Queens Park|

Код ниже:

nbr1.index = pd.RangeIndex(len(nbr1.index))
More than one neighborhood can exist in one postal code area.

for row_index,row in nbr1.iterrows():
    if(nbr1.loc[row_index,[‘Postal_Code]].values.astype(‘str) == nbr1.loc[row_index + 1,[‘Postal_Code]].values.astype(‘str)):
        print(‘inside same Postal code)
        print(nbr1.loc[row_index,[‘Postal_Code]].values.astype(‘str))
        print(nbr1.loc[row_index + 1,[‘Postal_Code]].values.astype(‘str))

    if(nbr1.loc[row_index,['Borough']].values.astype('str') == nbr1.loc[row_index + 1,['Borough']].values.astype('str')):
        print('inside same Borough')
        print(nbr1.loc[row_index,['Borough']].values.astype('str'))
        print(nbr1.loc[row_index + 1,['Borough']].values.astype('str'))
        print(nbr1.loc[row_index,['Neighborhood']].values.astype('str'))
        print(nbr1.loc[row_index + 1,['Neighborhood']].values.astype('str'))
        print('Adding')
        nbr1[row_index,['Neighborhood']] = nbr1.loc[row_index,['Neighbourhood']].values.astype('str').apply(lambda x: '-'.join(x +1), axis=1)
  • 1
    Пожалуйста, отредактируйте свой вопрос с правильным формированием и дополнительной информацией, если требуется.
Теги:
pandas
dataframe

1 ответ

1

Вы можете использовать groupby и agg

df.groupby('Postal_Code').agg({'Borough':'first',
                               'Neighborhood': ', '.join}).reset_index()

Выход:

  Postal_Code   Borough            Neighborhood
0   M3A         North York          Parkwoods
1   M4A         North York         Victoria Village
2   M5A       Downtown Toronto   Harbourfront, Regent Park
3   M6A         North York       Lawrence Heights, Lawrence Manor
4   M7A         Queens Park        Queens Park
  • 1
    Спасибо Тон, который только что добился цели.
  • 0
    @MansiGupta Рад помочь :) и отредактируйте вопрос с правильным форматированием.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню