Для l oop для объединения pandas фрейма данных с общими столбцами - PullRequest
2 голосов
/ 29 мая 2020

У меня есть 25 кадров данных, каждый из которых имеет 7 дат по возрастанию (в виде строк) и от 570 до 600 названий аэропортов в виде столбцов. Большая проблема заключается в том, что, поскольку фреймы данных хранят количество подъемов, которые каждый аэропорт совершает каждый день, недели, в течение которых определенные аэропорты неактивны, приводят к тому, что фреймы данных имеют разные порядки и количества одинаковых и непохожих названий аэропортов. Все имена столбцов будут отображаться в алфавитном порядке в каждом фрейме данных, но отсутствие только одного столбца аэропорта из фрейма данных нарушает все выравнивание главного фрейма данных.

Я пробовал объединить, объединить, объединить, обновить ... эта проблема действительно сложна, и моя конечная цель - иметь основной фрейм данных со всеми существующими аэропортами в алфавитном порядке в виде столбцов и текущими строками по мере увеличения дат и прохождения времени.

Я думаю, что мне нужно сделайте для l oop, чтобы сделать это: 1. Данные не могут быть потеряны 2. Необходимо объединить кадры данных по столбцам, чтобы, если имя столбца второго кадра данных совпадает с именем столбца первого кадра, новый данные будут добавлены ниже этого столбца без повторения имени столбца снова. 3. Если имя столбца второго столбца отличается от имени столбца первого, я хочу, чтобы столбец был добавлен как новый столбец (желательно в алфавитном порядке). 4.Если во втором фрейме данных нет столбца, который есть в первом, я хочу, чтобы он сказал NAN для этого аэропорта.

В общем, основные части, которые я хочу сделать для l oop, - это добавить данные в идентичные столбцы (даже если в фреймах данных есть столбцы не в порядке), добавить столбцы, которых раньше не было, заполните NAN, где отсутствуют аэропорты, и убедитесь, что имена столбцов отображаются только как строка 0. Извините, это так сложно объяснить.

Вот два простых примера фреймов данных, которые я хочу, чтобы for l oop мог объединить

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                    columns=['Airport1', 'Airport3', 'Airport4'])
df1.index.name='Dates'
df1.index=['11/01','11/02','11/03']
df2 = pd.DataFrame(np.array([[2, 4, 6], [8, 10, 12], [14, 16, 18]]),
                    columns=['Airport1', 'Airport2', 'Airport3'])
df2.index.name='Dates'
df2.index=['11/04','11/05','11/06']
display(df1,df2)

Dates **Airport1** **Airport3** **Airport4** 
11/01   1.            2.          3.  
11/02   4.            5.          6.   
11/03   7.            8.          9.

Dates **Airport1** **Airport2** **Airport3**
11/04   2.           4.           6
11/05   8.           10.          12
11/06   14.          16.          18

Результат, который мне нужен для l oop должен быть:

Dates **Airport1** **Airport2** **Airport3** **Airport4**
11/01   1.              NAN.         2.           3
11/02.  4.              NAN.         5.           6
11/03.  7.              NAN.         8.           9
11/04.  2.               4.          6.          NAN      
11/05.  8.              10.          12.         NAN
11/06.  14.             16.          18.         NAN

Еще одно примечание: у меня есть 25 кадров данных для объединения и подсчета, поэтому я хотел бы, чтобы для l oop можно было принимать бесконечные кадры данных . Заранее большое спасибо !!!

1 Ответ

2 голосов
/ 29 мая 2020

IIU C, вы можете попробовать pd.concat вместе с df.sort_index:

df = pd.concat([df1, df2]).sort_index(axis=1)

В случае более двух фреймов данных используйте :

from functools import reduce

dfs = [df1, df2] # list of all dataframes that need's to be combined
df = reduce(lambda d1, d2: pd.concat([d1, d2]), dfs).sort_index(axis=1)

Результат:

# print(df)

       Airport1  Airport2  Airport3  Airport4
11/01         1       NaN         2       3.0
11/02         4       NaN         5       6.0
11/03         7       NaN         8       9.0
11/04         2       4.0         6       NaN
11/05         8      10.0        12       NaN
11/06        14      16.0        18       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...