Я пытаюсь преобразовать dataframe, которое я не могу решить. Я попробовал несколько подходов из stackoverflow и документации pandas: apply, apply (lambda: ...), pivots и join. Слишком много попыток перечислить здесь, но не уверен, какой подход лучше всего, или, может быть, я попробовал правильный подход с неправильным синтаксисом.Python - Pandas - Dataframe: Условное условное смещение столбца
В принципе, у меня есть dataframe, и мне нужно 1) смещать столбцы, 2) количество столбцов, подлежащих смещению, изменяется и зависит от переменной в фреймворке данных, 3) создает столбцы в конце фрейма данных где необходимо, чтобы разместить смещение, и 4) размещать нули за вновь созданные интервалы.
df1 = pd.DataFrame({'first' : ['John', 'Mary', 'Larry', 'jerry'], '1' : [5.5, 6.0,10,20], '2' : [100, 200, 300, 400], '3' : [150, 100, 240, 110], 'offset' : ([1,0,2,1])})
goal_df = pd.DataFrame({'first' : ['John', 'Mary', 'Larry', 'jerry'], '1' : [0.0, 6.0, 0.0, 0], '2' : [5.5, 200, 0.0, 20], '3' : [100, 100, 10, 400], '4' : [150, 0.0, 300, 110], '5' : [0.0, 0.0, 240, 0.0]})
df1
1 2 3 first offset
5.5 100 150 John 1
6.0 200 100 Mary 0
10.0 300 240 Larry 2
20.0 400 110 jerry 1
goal_df
1 2 3 4 5 first
0 5.5 100 150 0 John
6 200.0 100 0 0 Mary
0 0.0 10 300 240 Larry
0 20.0 400 110 0 jerry
Этот набор данных будет иметь c. 500 строк и c. 120 столбцов. Сумма смещения будет очень близка к 0-12. Я думал об этом с базовыми функциями Python, но я также обнаружил, что сложный и временный потребитель программы будет побеждать в конечной цели, которая заключается в том, чтобы удалить некоторые задачи, выполняемые в Microsoft Excel.
Я очень жалуюсь на то, как Excel уступает таким крупным задачам, но кажется, что текущая функция offset() таблицы Excel в excel делает это очень простым способом, но с тысячами формул, очень медленно. Я продал свое рабочее место на преимуществах Python над Excel, и это мое первое настоящее испытание, поэтому скорость очень важна для меня, потому что я пытаюсь убедить своих коллег, что Python может сожрать эту таблицу намного быстрее, чем текущая предел файл весом в размере 96 МБ.
Я пришел довольно близко к функции расплава(), а затем взял прежние номера столбцов и добавил смещение к ним. Тем не менее, у меня было много проблем, пытающихся реформировать dataframe с помощью шарнира. Нет удачи в применении или применении (лямбда)!
Спасибо за любую помощь, которую любой может дать!
Спасибо, что посмотрели. Я пытаюсь решить ваше решение, поэтому, по крайней мере, у меня есть что-то, что работает. Тем временем я попытаюсь разработать этот один путь для плавления данных и изменения номеров столбцов (старый номер столбца + смещение). Единственная проблема заключается в том, что, когда я перехожу к «нерасплавленному» файловому кадру, стержень полностью разрушает все. – nordicray
@nordicray OK, если вы предпочитаете путь расплава/поворота, вы можете опубликовать то, что вы пробовали, и посмотреть, сможет ли кто-нибудь исправить или улучшить его. – JohnE
Спасибо @JohnE. Причина, по которой я не публиковал это, состоит в том, что каждый раз, когда я думал, что я близок, я пойму, как далеко я был на самом деле. Я думаю, что мне нужно сделать еще несколько исследований и на самом деле поставить пальцем на то, как работает многоиндексирование для фреймов данных в Pandas, прежде чем попробовать более оптимизированную версию этого. Я также считаю, что помощь в некоторых других областях, над которыми я работаю. – nordicray