Я углубляюсь в pandas мультииндексацию, и мне интересно, могу ли я заменить групповую итеративную обработку на мультииндексирование.
В настоящее время я использую эту функцию
необработанные данные:
station_name station_code breaktype
0 ABC ABC1 N
1 American Heroes HERO L
2 American Heroes HERO N
3 American Movie Classics AMC L
4 American Movie Classics AMC N
5 Animal Planet ANPL L
6 Animal Planet ANPL N
В настоящее время я использую эту функцию:
def createRegexPattern(df):
df = df.copy()
groups = df.groupby(["station_name", "station_code"])
patterns = pd.DataFrame([], columns=["origional_index", "root_words", "pattern"])
for key, group in groups:
patterns = patterns.append(pd.DataFrame(
{"origional_index": [group.index.to_list()],
"root_words": [key],
"pattern": [tuple(functools.reduce(lambda x,y: x + re.split('[\s,-]',y.strip()), key,[]))]}
))
return patterns.reset_index(drop=True)
Чтобы получить это:
origional_index root_words pattern
0 [0] (ABC, ABC1) (ABC, ABC1)
1 [1, 2] (American Heroes, HERO) (American, Heroes, HERO)
2 [3, 4] (American Movie Classics, AMC) (American, Movie, Classics, AMC)
3 [5, 6] (Animal Planet, ANPL) (Animal, Planet, ANPL)
можно ли использовать мультииндексирование вместо получить такой результат, как: желаемый результат мультииндексирования
origional_index breaktype
station_name station_code pattern
0 ABC ABC1 (ABC, ABC1) 0 N
1 American Heroes HERO (American, Heroes, HERO) 1 L
2 N
2 American Movie Classics AMC (American, Movie, Classics, AMC) 3 L
4 N
3 Animal Planet ANPL (Animal, Planet, ANPL) 5 L
6 N
Это жизнеспособное использование для DataFrame, или я должен остановиться, пока я впереди ...