根据单元格值爆炸数据框

时间:2019-06-24 17:15:04

标签: python pandas

我有一个看起来像这样的数据框:

import pandas as pd
import numpy as np

f = {'business':['#','FX','IR'],
 'AL':['A','L','#'],
 'Company':['207','#','1']}
filterr = pd.DataFrame(data=f)
filterr

只要数据帧中出现“#”,我就需要根据列表中的每个组合重复行。我拥有的列表集看起来像这样:

business=['FX','IR']
AL=['A','L']
Company=['1','207']

所以,我要寻找的最终结果如下:

f1 = {'business':['FX','IR','FX','FX','IR','IR'],
 'AL':['A','A','L','L','A','L'],
 'Company':['207','207','1','207','1','1']
 }

filter_output=pd.DataFrame(data=f1)
display(filter_output)

有什么想法可以最有效地做到这一点?

谢谢!!

1 个答案:

答案 0 :(得分:3)

这是一种方法,我不确定有效部分

filterr.mask(filterr.eq('#')).fillna(d).stack().str.split(',').apply(pd.Series).stack().unstack(1).ffill()
Out[804]: 
    business AL Company
0 0       FX  A     207
  1       IR  A     207
  2       CR  A     207
1 0       FX  L       1
  1       FX  L     207
2 0       IR  A       1
  1       IR  L       1

d={'business':'FX,IR,CR',
'AL':'A,L',
'Company':'1,207'}