Saya memiliki kerangka data panda yang terlihat seperti (ID transaksi kosong milik ID 1 atau ID 2):

df = pd.DataFrame(data=np.array([['1', 'Item1'], ['', 'Item2',], ['', 'Item3'] , ['2', 'Item1'], ['', 'Item2',]]), columns=['TransactionId', 'ProdictName'])

enter image description here

Saya mencari solusi bagaimana mengubah df ke df1 baru yang tidak memiliki ID Transaksi kosong, dan item dipisahkan dengan koma:

df1 = pd.DataFrame(data=np.array([['1', 'Item1, Item2, Item3'], ['2', 'Item1, Item2']]), columns=['TransactionId', 'ProdictName'])

enter image description here

Terima kasih

1
Denis Navotny 3 Juli 2020, 07:19

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan df.replace, df.ffill() dan df.groupby dengan df.groupby.agg:

In [15]: df.TransactionId = df.TransactionId.replace('', np.nan) 
In [19]: df.TransactionId = df.TransactionId.ffill()

In [21]: df1 = df.groupby('TransactionId', as_index=False).agg(','.join)

In [22]: df1
Out[22]: 
  TransactionId        ProdictName
0             1  Item1,Item2,Item3
1             2        Item1,Item2

Satu kalimat sesuai @sammywemmy:

In [26]: df.replace("", method="ffill").groupby("TransactionId", as_index=False).agg(",".join)  
Out[26]: 
  TransactionId        ProdictName
0             1  Item1,Item2,Item3
1             2        Item1,Item2
3
Mayank Porwal 3 Juli 2020, 04:38