我有这个案例研究来解决:
我有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
答案 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