В настоящее время я использую Python и Pandas для формирования «базы данных» цен на акции. Мне удалось найти некоторые коды, чтобы скачать цены на акции.
df1 - моя существующая база данных. Каждый раз, когда я загружаю цену за акцию, она будет выглядеть как df2 и df3. Затем мне нужно объединить данные df1, df2 и df3, чтобы они выглядели как df4.
У каждой акции есть свой столбец.
У каждой даты есть свой ряд.
df1: Существующая база данных
+----------+-------+----------+--------+
| Date | Apple | Facebook | Google |
+----------+-------+----------+--------+
| 1/1/2018 | 161 | 58 | 1000 |
| 2/1/2018 | 170 | 80 | |
| 3/1/2018 | 190 | 84 | 100 |
+----------+-------+----------+--------+
df2: новые данные (01.02.2017 и 01.04.2017) и обновленные данные (01.03.2017) для Google.
+----------+--------+
| Date | Google |
+----------+--------+
| 2/1/2018 | 500 |
| 3/1/2018 | 300 |
| 4/1/2018 | 200 |
+----------+--------+
df3: новые данные для Amazon
+----------+--------+
| Date | Amazon |
+----------+--------+
| 1/1/2018 | 1000 |
| 2/1/2018 | 1500 |
| 3/1/2018 | 2000 |
| 4/1/2018 | 3000 |
+----------+--------+
df4 Окончательный вывод: в основном он объединяет и обновляет все данные в базе данных. (df1 + df2 + df3) -> это будет обновленная база данных df1
+----------+-------+----------+--------+--------+
| Date | Apple | Facebook | Google | Amazon |
+----------+-------+----------+--------+--------+
| 1/1/2018 | 161 | 58 | 1000 | 1000 |
| 2/1/2018 | 170 | 80 | 500 | 1500 |
| 3/1/2018 | 190 | 84 | 300 | 2000 |
| 4/1/2018 | | | 200 | 3000 |
+----------+-------+----------+--------+--------+
Я не знаю, как объединить df1
и df3
.
И я не знаю, как объединить df1
и df2
(добавить новую строку: 01.04.2017), одновременно обновляя данные (01.02.2008 -> Исходные данные: NaN; исправленные данные: 500 | 01.03.2008 -> Исходные данные: 100; исправленные данные: 300) и оставив существующие нетронутыми данные (01.01.2017).
Может кто-нибудь помочь мне получить df4? =)
Спасибо.
РЕДАКТИРОВАТЬ: Основываясь на предложении социопата, я изменил код:
dataframes = [df2, df3]
df4 = df1
for i in dataframes:
# Merge the dataframe
df4 = df4.merge(i, how='outer', on='date')
# Get the stock name
stock_name = i.columns[1]
# To check if there is any column with "_x", if have, then combine these columns
if stock_name+"_x" in df4.columns:
x = stock_name+"_x"
y = stock_name+"_y"
df4[stock_name] = df4[y].fillna(df4[x])
df4.drop([x, y], 1, inplace=True)