Панды: конкретные датафреймы - PullRequest
1 голос
/ 23 сентября 2019

Мне нужно объединить группу данных:

df1 = pd.DataFrame({'Lic1': [0,5,7]}, index=['07:00', '08:00', '09:00'])
df2 = pd.DataFrame({'Lic1': [4,2,1]}, index=['10:00', '11:00', '12:00'])
df3 = pd.DataFrame({'Lic2': [1,1,4]}, index=['07:00', '08:00', '10:00'])

, чтобы получить следующий результат:

        Lic1    Lic2
07:00   0.0     1.0
08:00   5.0     1.0
09:00   7.0     NaN
10:00   4.0     4.0
11:00   2.0     NaN
12:00   1.0     NaN

Когда я использую concat, я получаю правильные столбцы, но повторяющийся индекс (07:00,08:00 и 10:00 из-за нового имени столбца):

df = pd.concat([df1, df2, df3], sort=True, axis=0)
Output:
        Lic1    Lic2
07:00   0.0     NaN
08:00   5.0     NaN
09:00   7.0     NaN
10:00   4.0     NaN
11:00   2.0     NaN
12:00   1.0     NaN
07:00   NaN     1.0
08:00   NaN     1.0
10:00   NaN     4.0

, а затем мне нужно объединить дублирующиеся индексы, чтобы сохранить максимальные значения и удалить дублирующиеся строки, например:

for index in df.index:
    for column in df.columns:
        df.loc[index,column] = df.loc[index, column].max()
df.drop_duplicates(inplace=True)

, который дает мне запрошенный вывод.

Есть ли какой-нибудь более простой (== более жуткий) способ, как это сделать за один шаг?Я попытался сделать это в один шаг с concat , merge или join , но, вероятно, что-то пропустил.Я всегда получаю либо дубликаты в индексе (как выше), либо дубликаты столбцов (например, двойной Lic1 с concat или Lic1_x и Lic1_y с слияние ).

1 Ответ

1 голос
/ 23 сентября 2019

Используйте max для индекса, что аналогично .groupby(level=0).max():

df = pd.concat([df1, df2, df3], sort=True, axis=0).max(level=0)
print (df)
       Lic1  Lic2
07:00   0.0   1.0
08:00   5.0   1.0
09:00   7.0   NaN
10:00   4.0   4.0
11:00   2.0   NaN
12:00   1.0   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...