结合具有不同行数的pandas DataFrame

时间:2019-10-19 17:51:13

标签: python pandas dataframe plot

我已经开始开发一些脚本来处理和绘制数据。我对将python与pandas结合使用不是很有经验。

问题描述如下。我有一个日期为time的DataFrame:

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

然后我还有另外两个DataFrame,data1data2

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

我的目标是获取下面显示的DataFrame以便绘制结果。如您所见,对于data1 DataFrame,从data2time起没有对应的日期时,我需要零。

     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 :(得分:0)

如果将“日期”设置为索引,则行对齐将起作用。

pip install ssl

答案 1 :(得分:0)

对方说:去上网检查文件!

无论如何,这是解决问题的一种方法:

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