我有一个看起来像这样的数据框:
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)
有什么想法可以最有效地做到这一点?
谢谢!!
答案 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'}