python - 使用相同的 ID,pandas 从多个列表创建多行
问题描述
我有一个像这样的示例数据框,列:ID
和Main
ID,Main
0,[30 115 266 38;662 99 1199 43] [511 133 25 47] [664 162 49 22]
如何使用 pandas 使我的数据框如下所示
预期产出
ID,Main
0,30 115 266 38
0,662 99 1199 43
0,511 133 25 47
0,664 162 49 22
解决方案
首先by ,然后在by for of s 之间提取值。replace
;
][
[]
findall
Series
list
最后创建DataFrame
,重塑,stack
并通过一些数据清理reset_index
:
s = df['Main'].fillna('').str.replace(';','][').str.findall('\[(.*?)\]')
df = (pd.DataFrame(s.values.tolist(), index=s.index)
.stack()
.reset_index(level=1, drop=True)
.reset_index())
df.columns = ['ID','Main']
print (df)
ID Main
0 0 30 115 266 38
1 0 662 99 1199 43
2 0 511 133 25 47
3 0 664 162 49 22
另一个解决方案Series
:
s = df['Main'].fillna('').str.strip('[]').str.split(';|\]\s+\[')
推荐阅读
- html - UI设计(如何让它看起来很专业)
- excel - FindNext - VBA 代码测试正确,但 Excel 中的公式不起作用
- python-3.x - 从numpy数组中删除元素?
- java - 当我从服务器获取 html 文件或调用任何服务时,响应在 chrome 网络选项卡中包含红点,导致 HTML/JSON 中断
- reactjs - 如何使用 webpack 配置 create-react-app 以及它是如何运行测试的?
- forms - 使用 GlobalKey 进行验证
在 Flutter Stepper 小部件的各个步骤中即使输入正确也会返回 false - c# - Unity 中的持续射速
- angular - 从嵌套组件中获取 url 参数
- mysql - 如何计算同一记录的不同平均值?
- java - Jenkins JUnit 报告多个失败\错误