python - 展开多行

标签 python pandas

我必须在数据框下方:

import pandas as pd

a = pd.DataFrame([{"name": "John", 
                   "item" : "item1||item2||item3", 
                   "itemVal" : "item1Val||item2Val||item3Val"}, 
                  {"name" : "Tom", 
                   "item":"item4", 
                   "itemVal" : "item4Val"
                  }
                 ])

数据框是这样的:

   name                 item                       itemVal
   John  item1||item2||item3  item1Val||item2Val||item3Val
    Tom                item4                      item4Val

我想把这一行分解成多行,这样就变成了这样(注意item和它的itemVal需要匹配)。

   name                 item                       itemVal
   John                item1                      item1Val
   John                item2                      item2Val
   John                item3                      item3Val
    Tom                item4                      item4Val

我在这里查看了其他答案:

Split (explode) pandas dataframe string entry to separate rows

pandas: How do I split text in a column into multiple rows?

但只适用于一列。我如何让它在多列上工作?我正在使用 Pandas 1.0.1 和 Python 3.8

最佳答案

a = a.apply(lambda x: [v.split('||') for v in x]).apply(pd.Series.explode)
print(a)

打印:

   name   item   itemVal
0  John  item1  item1Val
0  John  item2  item2Val
0  John  item3  item3Val
1   Tom  item4  item4Val

编辑:如果你只想拆分选定的列,你可以这样做:

exploded = a[['item', 'itemVal']].apply(lambda x: [v.split('||') for v in x]).apply(pd.Series.explode)
print( pd.concat([a['name'], exploded], axis=1) )

关于python - 展开多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61844022/

相关文章:

python - 如何使用 Python 自动填写在线表单中的文本区域?

Python 3 在划分两个大数时给出错误的输出?

python - 识别 Pandas 数据框中并发事件的简单方法

python - 如果数字为 1,则从 pandas 列中删除第一个字符

python - IndexError : list index out of range in"if. ..否则...”

python - 从openpyxl中的坐标值获取行号和列号

python - 在 Pandas 数据框中减去 Col A - Col B

python - 根据值拆分Pandas Dataframe列

python - 将单个行按 ";;"拆分为同一列中的多个单独行

python - 将函数应用于 pandas 数据框中的所有其他列