Python несколько двух идентичных фреймов данных, чтобы сформировать новый фрейм данных - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 2 кадра данных, которые похожи:

df1:

enter image description here

df2:

enter image description here

Я хочу обновить столбец "длина" в df1, умножив значения в df2 (для комбинации "страна" - "город"):

enter image description here

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

Любая помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 30 марта 2020

Вы можете объединить столбцы в зависимости от страны и города, затем создать новый столбец, в котором вы рассчитываете новые значения, а затем обновляете свой фрейм данных:

# import df1
df1 = pd.read_excel(df1_from_directory)
df2 = pd.read_excel(df2_from_directory)


df1_test = df1
df2_test = df2

# merge the values from df1 basaed on city and country
df_merged = df1_test.merge(df2_test,on=["country","city"],how = "left")
df_merged

# create a new column in which you calculate the new values
df1_new_length = df_merged["df1_length"] * df_merged["length"]

# update the old column with the new values
df1_test.df1_length = df1_new_length

#
print(df1_test)

Работало для меня.

0 голосов
/ 30 марта 2020

Для таких расчетов предусмотрена функция Pandas Мультииндекс . Повторно индексируйте кадры данных до

df1 = df1.set_index(['country', 'city', 'road'])
df1 
                       length
country city    road    
us      ny      m1     10
                m2     20
        la      m3     30
                m4     40
                m5     50

df2 = df2.set_index(['country', 'city'])
df2
              length
country city    
us      ny    1
        la    2

, а затем просто умножьте на 2 кадра:

df1 = df1 * df2
df1
                      length
country city    road    
us      la      m3    60
                m4    80
                m5    100
        ny      m1    10
                m2    20

Если хотите, вы можете сбросить индекс впоследствии:

df1.reset_index()

country city    road    length
us      la      m3      60
us      la      m4      80
us      la      m5      100
us      ny      m1      10
us      ny      m2      20
0 голосов
/ 30 марта 2020

Вы можете сначала объединиться в 2 dfs на основе country,city, чтобы получить length1 и length2 в одном и том же df.

newdf = df1.merge(df2,on=["country","city"],how = "left")

, а затем просто умножить два столбца длины, которые у вас есть.

Переименовать один из столбцов length. Не работает, если 2 столбца имеют одинаковые имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...