如何在给定范围的Python表中添加特定日期的值?

时间:2018-05-31 09:59:59

标签: python pandas numpy dataframe pivot-table

我有一个数据集(Product_ID,date_time,Sold),其中包含在不同日期销售的产品。这些日期为9个月,每月随机13天或更长时间。我必须以这样的方式隔离数据:每个产品每天销售多少产品1-3天,每天4-7天销售,每天8-15天销售,每天销售> 16天。那么如何使用pandas和其他包

在python中对此进行编码
PRODUCT_ID      DATE_LOCATION  Sold
0E4234          01-08-16 0:00    2
0E4234          02-08-16 0:00    7
0E4234          07-08-16 0:00    3
0E4234          08-08-16 0:00    1
0E4234          09-08-16 0:00    2
0E4234          10-08-16 0.00    1
.
. 
.
0G2342          22-08-16 0:00    1
0G2342          23-08-16 0:00    2
0G2342          26-08-16 0:00    1
0G2342          28-08-16 0:00    1
0G2342          29-08-16 0:00    3
0G2342          30-08-16 0:00    3
.
.
.(goes for 64 products each with 9 months of data)
.

我甚至不知道如何在python中编写代码 所需的输出是

PRODUCT_ID      Days   Sold
0E4234          1-3      9 #(1,2) dates because range is 1 to 3
                4-7      7 #(7,8,9,10) dates because range is 4 to 7
                8-15     0
                 >16     0
0G2342          1-3      11 #(22,23),(26),(28,29,30) dates because range is 1 to 3
                4-7      0
                8-15     0
                 >16     0
.
.(for 64 products)
.

如果至少有人发布了从哪里开始的链接,那将会很高兴。 我试过了

df["DATE_LOCATION"] = pd.to_datetime(df.DATE_LOCATION)
df["DAY"] = df.DATE_LOCATION.dt.day
def flag(x):
    if 1<=x<=3:
        return '1-3'
    elif 4<=x<=7:
        return '4-7'
    elif 8<=x<=15:
        return '8-15'
    else:
        return '>=16'
df["Days"] = df.DAY.apply(flag)
df.groupby(["PRODUCT_ID","Days"]).Sold.sum()

这给了我每个月这几天之间销售的产品数量。但是我需要指定范围内的产品总和是产品以指定的条件出售。

1 个答案:

答案 0 :(得分:2)

Series使用DataFrame与原始cut相同的尺寸,与sum合并并汇总df['DATE_LOCATION'] = pd.to_datetime(df['DATE_LOCATION'], format='%d-%m-%y %H:%M') df = df.sort_values("DATE_LOCATION") s = (df["DATE_LOCATION"].diff().dt.days > 1).cumsum() count = s.groupby(s).transform('size') print (count) 0 2 1 2 2 4 3 4 4 4 5 4 6 2 7 2 8 1 9 3 10 3 11 3 Name: DATE_LOCATION, dtype: int32 bins = pd.cut(count, bins=[0,3,7,15,31], labels=['1-3', '4-7','8-15', '>=16']) df = df.groupby(['PRODUCT_ID', bins])['Sold'].sum().reset_index() print (df) PRODUCT_ID DATE_LOCATION Sold 0 0E4234 1-3 9 1 0E4234 4-7 7 2 0G2342 1-3 11

$openingTime = date_create_from_format('H : i A', $your_variable);
$closingTime = date_create_from_format('H : i A', $your_variable);