在 pandas 中堆叠列表数组/在 Pandas 中等效 SFrame 堆栈
Stacking an array of lists in pandas / SFrame stack equivalent in Pandas
pandas 数据帧中是否有等效的 SFrame 堆栈? Pandas' 自己的堆栈仅适用于级别,而我正在寻找与包含列表的其他列在同一级别扩展单个列。
输入Dataframe:实际dataframe中多了一些像user这样的列
+-------+------------------+
| user | friends |
+-------+------------------+
| 1 | [2, 3, 4] |
| 2 | [5, 6] |
| 3 | [4, 5, 10, None] |
+----- -+------------------+
输出 Dataframe:There 是一些像实际数据框中的用户一样的列,应该类似地重复这些列
+------+--------+
| user | friend |
+------+--------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 5 |
| 2 | 6 |
| 3 | 4 |
| 3 | 5 |
| 3 | 10 |
| 3 | None |
+------+--------+
你可以这样做
data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user']], how='left')
如果您有多个类似于 "user" 的列,这也适用,例如 "other column",那么您只需执行
data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user',"other column"]], how='left')
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
pandas 数据帧中是否有等效的 SFrame 堆栈? Pandas' 自己的堆栈仅适用于级别,而我正在寻找与包含列表的其他列在同一级别扩展单个列。
输入Dataframe:实际dataframe中多了一些像user这样的列
+-------+------------------+
| user | friends |
+-------+------------------+
| 1 | [2, 3, 4] |
| 2 | [5, 6] |
| 3 | [4, 5, 10, None] |
+----- -+------------------+
输出 Dataframe:There 是一些像实际数据框中的用户一样的列,应该类似地重复这些列
+------+--------+
| user | friend |
+------+--------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 5 |
| 2 | 6 |
| 3 | 4 |
| 3 | 5 |
| 3 | 10 |
| 3 | None |
+------+--------+
你可以这样做
data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user']], how='left')
如果您有多个类似于 "user" 的列,这也适用,例如 "other column",那么您只需执行
data['friend'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('friend').join(data[['user',"other column"]], how='left')
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