Объединение панелей данныхФреймы с различным количеством строк - PullRequest
0 голосов
/ 19 октября 2019

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

Проблема описана ниже. У меня есть DataFrame time с датами:

     Date
0   Jul-03      
1   Jul-04
2   Jul-05
3   Jul-06
4   Jul-07
5   Jul-08
6   Jul-09

А затем у меня есть два других DataFrame, data1 и data2:

(data1)
     Date      Count
0   Jul-05      20
1   Jul-06      10
(data2)
     Date      Count
0   Jul-09      36

Моя цельчтобы получить DataFrame, показанный ниже, чтобы построить результаты. Как видите, мне нужны нули, когда нет соответствующих дат из data1 и data2 относительно time DataFrame.

     Date      data1      data2
0   Jul-03       0          0
1   Jul-04       0          0
2   Jul-05       20         0
3   Jul-06       10         0
4   Jul-07       0          0
5   Jul-08       0          0
6   Jul-09       0         36

Я перепробовал много вещей - боролся за 1день, но все еще нет прогресса :). Надеюсь, вы можете помочь!

С уважением

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

как сказал другой: иди проверь документацию в интернете!

В любом случае, вот способ решить твою проблему:

1- Установите рамки данных

In [1]:
import pandas as pd

columns = ['Date']
data = ['Jul-03'
    ,'Jul-04'
    ,'Jul-05'
    ,'Jul-06'
    ,'Jul-07'
    ,'Jul-08'
    ,'Jul-09']

time = pd.DataFrame(data = data, columns = columns)

columns = ['Date', 'Count']
data = [
        ['Jul-05', 20],
        ['Jul-06', 10]
       ]
data1 = pd.DataFrame(data=data, columns=columns)

data2 = pd.DataFrame(data=[['Jul-09', 36]], columns=columns)

2 - объединить кадры данных

In [2]:
df_list = [data1, data2]
iterator = 0
for df in df_list:
    iterator += 1
    column_name = 'data' + str(iterator)
    time = time.merge(df, how='left', left_on='Date', right_on='Date').fillna(0).rename(columns={'Count':column_name})
time

Out [2]:
    Date    data1   data2
0   Jul-03  0.0     0.0
1   Jul-04  0.0     0.0
2   Jul-05  20.0    0.0
3   Jul-06  10.0    0.0
4   Jul-07  0.0     0.0
5   Jul-08  0.0     0.0
6   Jul-09  0.0     36.0
0 голосов
/ 19 октября 2019

Выравнивание строк будет работать, если в качестве индекса указано «Дата».

df_rslt= df_time.set_index("Date")

df_rslt["data1"]= df_data1.set_index("Date")["Count"]
df_rslt["data2"]= df_data2.set_index("Date")["Count"]

df_rslt.fillna(0,inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...