Python 按日期重新采样,并根据条件添加新的总和列

Python 按日期重新采样,并根据条件添加新的总和列,python,pandas,dataframe,Python,Pandas,Dataframe,我想每天/每周/每月对数据帧重新采样。我很困惑,也不知道该怎么做。如何使用条件重新采样并对新创建的行求和 df = pd.DataFrame({ 'date': ['2014-08-4 19:00:00', '2014-08-5 10:09:00', '2014-08-4 21:04:00','2014-08-5 22:07:00', '2014-08-5 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-5

我想每天/每周/每月对数据帧重新采样。我很困惑,也不知道该怎么做。如何使用条件重新采样并对新创建的行求和

df = pd.DataFrame({ 
    'date': ['2014-08-4 19:00:00', '2014-08-5 10:09:00', '2014-08-4 21:04:00','2014-08-5 22:07:00', '2014-08-5 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00', '2014-08-4 22:09:00', '2014-08-5 22:09:00'], 
    'id'  :[4,5,7,8,2,3,5,2,1,1,4,4,2,4,5,1,3,9,7,9],
    'qty' :[9,5,7,8,3,3,5,2,1,1,4,4,2,4,5,1,3,5,7,9], 
    'type' :[1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0] 
})
inward = df['type'] == 0
outward = df['type'] == 1

df1 = df.join(df[inward].groupby(['id'])['qty'].sum(), on='id', rsuffix='_inward')
df2 = df.join(df[outward].groupby(['id'])['qty'].sum(), on='id', rsuffix='_outward')

df1['qty_outward'] = df2['qty_outward']
我正在尝试以以下格式获取数据

    date                 id qty_inward  qty_outward
0   2014-08-04 19:00:00  4  8           13
1   2014-08-05 10:09:00  5  5           0
2   2014-08-04 21:04:00  7  0           14
3   2014-08-05 22:07:00  8  8           0
4   2014-08-05 22:09:00  2  4           3
5   2014-08-05 22:09:00  3  0           3
8   2014-08-04 22:09:00  1  0           1
9   2014-08-05 22:09:00  1  0           2
14  2014-08-04 22:09:00  5  5           5
16  2014-08-04 22:09:00  3  3           0
17  2014-08-05 22:09:00  9  14          0
我所做的这些工作是为了每周/每天/每月创建开盘和收盘股票。我的方法可能是错误的,如果你有建议,请提供

我认为您可以与一起使用-这是中的新功能。最后按第二级将形状重塑为柱:

print (df.groupby(['id', 'type'])
         .resample('D')['qty']
         .sum()
         .unstack(1, fill_value=0)
         .reset_index(level=0))

type        id  qt_inward  qt_outward
date                                 
2014-08-04   1          0           1
2014-08-05   1          0           2
2014-08-05   2          4           3
2014-08-04   3          3           0
2014-08-05   3          0           3
2014-08-04   4          8          13
2014-08-04   5          5           5
2014-08-05   5          5           0
2014-08-04   7          0          14
2014-08-05   8          8           0
2014-08-05   9         14           0
我想你可以使用-这是新的功能。最后按第二级将形状重塑为柱:

print (df.groupby(['id', 'type'])
         .resample('D')['qty']
         .sum()
         .unstack(1, fill_value=0)
         .reset_index(level=0))

type        id  qt_inward  qt_outward
date                                 
2014-08-04   1          0           1
2014-08-05   1          0           2
2014-08-05   2          4           3
2014-08-04   3          3           0
2014-08-05   3          0           3
2014-08-04   4          8          13
2014-08-04   5          5           5
2014-08-05   5          5           0
2014-08-04   7          0          14
2014-08-05   8          8           0
2014-08-05   9         14           0

你的方法在哪里?刚刚更新,我首先尝试对值求和,然后重新采样。但这不会给出任何输出。你确定你的输出是正确的吗
df1=df.groupby([df.date,df.id,df.type]).sum().unstack()
为第一行返回不同的内容。你能解释一下原因吗?或者输入错误?按日期分组将不会返回正确的结果,因为时间会有所不同。此外,每日重采样不适用于groupby。你可以看到,当我们按日期分组时,同一id和日期有多个条目。你的方法在哪里?刚刚更新,我首先尝试求和值,然后重新采样。但这不会给出任何输出。你确定你的输出是正确的吗
df1=df.groupby([df.date,df.id,df.type]).sum().unstack()
为第一行返回不同的内容。你能解释一下原因吗?或者输入错误?按日期分组将不会返回正确的结果,因为时间会有所不同。此外,每日重采样不适用于groupby。您可以看到,当我们按日期分组时,对于相同的id和日期有多个条目。Hmmm,如果使用按日期重采样,则会丢失时间信息。这有问题吗?嘿,这就是我要找的,我们怎么能在单独的列中有ID?嗯,如果按天使用重采样,你会丢失时间信息。有问题吗?嘿,这就是我要找的,我们怎么能在单独的列中有ID?