Home > Blockchain >  Merge rows that haven a common value in one of the columns
Merge rows that haven a common value in one of the columns

Time:05-18

I have a data frame that looks like this

df = pd.DataFrame([{ 'price': 123, 'name': 'anna', 'amount': 1,'telephone':956},
                   { 'price':   7, 'name': 'anna', 'amount': 2,'telephone':956},
                   { 'price':  42, 'name': 'bob', 'amount': 30,'telephone':956},
                   { 'price':   1, 'name': 'charlie', 'amount': 10,'telephone':956},
                   { 'price':   2, 'name': 'charlie', 'amount': 100,'telephone':956}])
print(df)
price     name  amount  telephone
0    123     anna       1        956
1      7     anna       2        956
2     42      bob      30        956
3      1  charlie      10        956
4      2  charlie     100        956

And I would like to have a data frame like the following

name  price-name-amount-telephone
anna  1-123-1-956|1-7-2-956
bod   2-42-30-956
charlie 3-1-100-956|3-2-100-956

CodePudding user response:

Use GroupBy.ngroup for groups numbers, then aggregate columns joined by - with join by |:

df.insert(0, 'g', df.groupby('name', sort=False).ngroup()   1)

df = (df.set_index('name')
        .astype(str)
        .agg('-'.join,1)
        .groupby(level=0)
        .agg('|'.join)
        .reset_index(name='all')
        )
print (df)
      name                     all
0     anna   1-123-1-956|1-7-2-956
1      bob             2-42-30-956
2  charlie  3-1-10-956|3-2-100-956
  • Related