1 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
使用:
import re
from itertools import product
def mapper(s):
lst = re.findall(r'(\w+)\{(\d+)-(\d+)\}', s)
prd = [['{}{}'.format(*p) for p in product([w], range(int(m), int(n) + 1))] for w, m, n in lst]
return list(map(''.join, product(*prd)))
df['A'] = df['A'].map(mapper)
df = df.explode('A').reset_index(drop=True)
細(xì)節(jié):
步驟 A:定義一個(gè)mapper函數(shù),它將輸入作為字符串參數(shù) eg'test{1-2}this{1-3}'并映射此字符串以生成所有可能的字符串,這些字符串可以通過將范圍與相應(yīng)的單詞相乘獲得。mapper輸入字符串的函數(shù)工作'test{1-2}this{1-3}'可以進(jìn)一步解釋為:
print(lst) # Use 're.findall' to parse all the words and their corresponding ranges
[('test', '1', '2'), ('this', '1', '3')]
print(prd) # Use 'itertools.product' to get all inner level products
[['test1', 'test2'], ['this1', 'this2', 'this3']]
# Again use 'itertools.product' to get all outer level products
['test1this1', 'test1this2', 'test1this3', 'test2this1', 'test2this2', 'test2this3']
步驟 B:使用Series.map
on columnA
將函數(shù)映射mapper
到 column 的每個(gè)值A
。
# print(df)
A B
0 [test1this1, test1this2, test1this3, test2this1, test2this2, test2this3] yes
1 [or2, or3] no
步驟 C:使用DataFrame.explode
列A
將每個(gè)列表(如列中的值)轉(zhuǎn)換A
為復(fù)制索引值的行。
# print(df)
A B
0 test1this1 yes
1 test1this2 yes
2 test1this3 yes
3 test2this1 yes
4 test2this2 yes
5 test2this3 yes
6 or2 no
7 or3 no
添加回答
舉報(bào)