У меня есть образец данных:
column1 column2 column3 column4 column5
a b c paddy, jimmy, john [242352, 2351235, 65436324]
a z c james, jill, jillian [325134, 63464374568, 43574578654]
s t y patsy [463465573452]
Я хочу отделить "column4" и "column5", разделенные комами. Так что каждый столбец 4 и 5 имеет только одно значение. Остальная часть строки будет повторяться.
Пример результирующего фрейма:
column1 column2 column3 column4 column5
a b c paddy 242352
a b c jimmy 2351235
a b c john 65436324
.......
Любые решения оцениваются. Я рассмотрел предыдущие аналогичные вопросы о переполнении стека, но поскольку у меня есть значения float, приведенные решения не работают для меня.
Используйте pd.reindex
и pd.index.repeat
для повторения строк.
Затем используйте str.extractall
для извлечения только чисел из col5
и str.split
, stack
для расширения col4
и col5
# Reindex and repeat cols on len of split and reset index
df1 = df.reindex(df.index.repeat(df['column4'].fillna("").str.split(',').apply(len)))
df1 = df1.drop(['column4','column5'],1)
# Splitting both cols
s = df['column4'].str.split(',', expand=True).stack().reset_index(level=1,drop=True)
s1 = df['column5'].str.extractall('(\d+)').reset_index(level=1,drop=True)[0]
# Now grouping the series and df using cumcount.
df1 = df1.set_index(df1.groupby(df1.index).cumcount(), append=True)
s = s.to_frame('column4').set_index(s.groupby(s.index).cumcount(), append=True)
s1 = s1.to_frame('column5').set_index(s1.groupby(s1.index).cumcount(), append=True)
# Joining the all of them together and reset index.
df1 = df1.join(s, how='outer').join(s1,how='outer').reset_index(level=[0,1],drop=True)
print (df1)
column1 column2 column3 column4 column5
0 a b c paddy 242352
1 a b c jimmy 2351235
2 a b c john 65436324
3 a z c james 325134
4 a z c jill 63464374568
5 a z c jillian 43574578654
6 s t y patsy 463465573452
column 4
есть значения NaN? Позвольте мне обновить ответ.