首页 > 解决方案 > 从多行到单行的 DataFrame 转换

问题描述

我有看起来像的熊猫数据框(空白事务 ID 属于 ID 1 或 ID 2):

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

在此处输入图像描述

我正在寻找解决方案如何将df转换为没有空白事务 ID的新df1,并且项目用逗号分隔:

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

在此处输入图像描述

谢谢

标签: pythonpandasdataframepandas-groupby

解决方案


您可以使用df.replace,df.ffill()和:df.groupbydf.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

根据@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

推荐阅读