У меня есть такой фрейм данных
probe_names PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3 \
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
И я хочу добавить 2 пустых/NaN строки каждые 3 строки
probe_names PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3 \
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
3
4
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
3
4
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
3
4
Я не знаю, как это сделать в многоиндексных таблицах. Я проверил в Интернете, но я не могу найти что-то действительно похожее.
Пожалуйста, включите этот словарь в свой пост. Не ссылайтесь на внешние сайты.
Я не могу. Это говорит слишком много кода
reindex
в мультииндекс:
#include an extra index level to differentiate between duplicated indices
df = df.set_index(df.groupby(level=[0,1],sort=False).cumcount(),append=True)
#create a 3-level multiindex
midx = pd.MultiIndex.from_product([df.index.levels[0],range(df.index.levels[1].max()+3),df.index.levels[2]])
#reindex, sort, and drop the extra level
output = df.reindex(midx).sort_index(level=[0,2],ascending=[False,True]).droplevel(2)
>>> output
PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
ValueError: невозможно обработать неуникальный мультииндекс! во второй строке вашего кода
может ли это быть проблема с версией pandas?
Используете ли вы другие данные, чем в вашей выборке? Если да, предоставьте образец, который вызывает указанную вами ошибку. Для справки: у меня панды 1.4.2, но я сомневаюсь, что проблема в этом.
Нет. Я использую те же данные, что и диктофон. Как вы конвертируете dict в фрейм данных pandas
pd.DataFrame(dictionary)
?
Я преобразовал фрейм данных в dict (с кодом, который вы мне передали), а затем из словаря в новый фрейм данных pandas. С этим новым (и теоретически равным фреймом данных) я запустил код, который вы предлагаете в ответе, и он сработал. Так или иначе, исходный фрейм данных и тот, который был создан из словаря, не совпадают.
Кроме того, если вы прочитаете свое решение, половина данных отсутствует. Например, Джемайма в столбце PLAGL1 содержит 4 значения на входе (0,55,0,51,0,54,0,48). Однако в вашем выводе я могу прочитать только два последних значения.
Я поместил картинку в документ Word с выводом, и она идентична той, что вы показываете. Если вы видите мой желаемый результат, это должно быть 10 строк на человека.
@Monkiky - я смог воспроизвести ваши данные. Смотрите отредактированный ответ. Это должно сработать.
Интересно, вы правы. если я выполню my_dict = data_no_control_patient.to_dict(), половина данных исчезнет. Однако я уверен, что data_no_control_patient в комплекте. Что происходит?
Это потому, что ваши индексы дублируются, а словарь не может иметь повторяющихся индексов. Вы пробовали отредактированный ответ?
Можете ли вы предоставить конструктор для вашего фрейма данных с помощью
df.to_dict()
?