计算两个不同数据帧的数据

时间:2015-09-05 14:15:56

标签: python python-3.x pandas ipython

我有这个案例研究来解决:

我有2个不同的数据帧,我想填写"到来" DF1中的列(医院数据)根据DF1中的日期时间计算到达DF2的所有pat(在excel中是一个计数函数)。例如在DF1中,我有datetime = 2013-01-01,我去计算所有到达DF2的患者(到达列)= 2并将结果存储在" ARRIVALS" (DF1)。

DF1

    patient datetime    arrivals    departures  occupancy   dayofweek
0   pat 2013-01-01  0   0   0   1
1   pat 2013-01-02  0   0   0   2
2   pat 2013-01-03  0   0   0   3
3   pat 2013-01-04  0   0   0   4
4   pat 2013-01-05  0   0   0   5

DF2


category    Arrival     departures  occupancy   dayofweek
0   pat 2013-01-01  2013-01-02  0   
1   pat 2013-01-01  2013-01-02  2
2   pat 2013-01-03  2013-01-15  3
3   pat 2013-01-04  2013-01-20  4
4   pat 2013-01-05  2013-01-20  5

3 个答案:

答案 0 :(得分:0)

您可以先在DF2上进行groupby,计算其中一列,然后将生成的DataFrame与DF1合并,如下所示:

df2_gr = df2.groupby('Arrival')['category'].count().reset_index()

df3 = df1.merge(df2_gr, left_on='datetime', right_on='Arrival', how='left').fillna(0)

答案 1 :(得分:0)

我认为你正在寻找groupby。这样的事情应该有效。你需要照顾伯爵的nans。

import pandas as pd

d1 = pd.DataFrame([['A', 'B', 'C', 'D', 'E', 'F'], ['blah', 'blah', 'blah', 'blah', 'blah', 'blah']]).T
d2 = pd.DataFrame([['A', 'A', 'C', 'D', 'A', 'D'], ['blah', 'blah', 'blah', 'blah', 'blah', 'blah']]).T

unique_counts = d2.groupby(0).count()

pd.merge(d1, unique_counts, left_on=0, right_index=True, how='outer')

答案 2 :(得分:0)

我试图应用你的答案,但我没有得到好的结果,如下所示:我只有1970 -01-01的相同值,而不是在datetime列中存储具有相同值的列。到达列为空,而不是根据需要计算到达数量(来自df1)

df3 = pandas.merge(df1,df2_gr, left_on='datetime', right_on ='Datain',how='left').fillna(0)
df3

   category datetime    arrivals    departures  occupancy   dayofweek   Arrival category
0   pat 2013-01-01  0   0   0   1   1970-01-01  0
1   pat 2013-01-02  0   0   0   2   1970-01-01  0
2   pat 2013-01-03  0   0   0   3   1970-01-01  0
3   pat 2013-01-04  0   0   0   4   1970-01-01  0
4   pat 2013-01-05  0   0   0   5   1970-01-01  0
5   pat 2013-01-06  0   0   0   6   1970-01-01  0
6   pat 2013-01-07  0   0   0   0   1970-01-01  0
7   pat 2013-01-08  0   0   0   1   1970-01-01  0
8   pat 2013-01-09  0   0   0   2   1970-01-01  0