У меня ниже 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)
Вы можете использовать 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