在Pandas中堆叠pandas / SFrame堆栈中的列表数组

时间:2017-08-19 03:48:27

标签: pandas sframe

pandas数据帧中是否存在等效的SFrame堆栈?熊猫'自己的堆栈只适用于级别,而我正在寻找扩展与包含列表的其他列相同级别的单个列。

输入数据框:在实际数据框中还有一些像user这样的列

+-------+------------------+
| user  |     friends      |
+-------+------------------+
|  1    |     [2, 3, 4]    |
|  2    |      [5, 6]      |
|  3    | [4, 5, 10, None] |
+----- -+------------------+

输出数据帧:在实际数据帧中还有一些像用户这样的列应该以类似的方式重复

+------+--------+
| user | friend |
+------+--------+
|  1   |  2     |
|  1   |  3     |
|  1   |  4     |
|  2   |  5     |
|  2   |  6     |
|  3   |  4     |
|  3   |  5     |
|  3   |  10    |
|  3   |  None  |
+------+--------+

2 个答案:

答案 0 :(得分:1)

你可以这样做

data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user']], how='left')

如果您有多个类似于" user"的列,这也会有效。专栏说"其他专栏",然后你会做

data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user',"other column"]], how='left')

答案 1 :(得分:1)

pd.DataFrame.from_items([
    ('user', df.user.values.repeat(df.friends.str.len())),
    ('friends', np.concatenate(df.friends))
])

   user friends
0     1       2
1     1       3
2     1       4
3     2       5
4     2       6
5     3       4
6     3       5
7     3      10
8     3    None