将列表的数据框重塑为另一个数据框

时间:2018-11-13 14:35:08

标签: python pandas numpy dataframe pandas-groupby

我有一个这样的名称和列表数据框:

private int collectedDots

我想将此数据框重塑为另一个数据框,因为所有名称将有3个这样的列表:

| Name | value |
|:-----|------:|
| A    |[1,4,7]|
| A    |[9,2,5]|
| A    |[6,9,3]|
| A    |[1,4,7]|
| A    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|
| B    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|

是否有使用熊猫的更简单方法?

2 个答案:

答案 0 :(得分:3)

使用groupby + pd.Series + melt

df2 = df.groupby('Name').apply(lambda s: pd.Series([s['value'].str[k].agg(list) for k 
in range(3)])).T.melt()

数据框如下所示:

   Name         value
0   A       [1, 9, 6, 1, 9]
1   A       [4, 2, 9, 4, 2]
2   A       [7, 5, 3, 7, 5]
3   B       [6, 1, 9, 6, 1]
4   B       [9, 4, 2, 9, 4]
5   B       [3, 7, 5, 3, 7]

答案 1 :(得分:2)

您可以,但是很多更好的主意是将您的列表分成单独的系列:

res = pd.concat((pd.DataFrame(np.array(grp['value'].tolist()).T.reshape(3, -1))\
                 .assign(Name=key) for key, grp in df.groupby('Name')),
                ignore_index=True)

print(res)

   0  1  2  3  4 Name
0  1  9  6  1  9    A
1  4  2  9  4  2    A
2  7  5  3  7  5    A
3  6  1  9  6  1    B
4  9  4  2  9  4    B
5  3  7  5  3  7    B