大熊猫分组数据帧 - 蟒
我有这样的数据集,大熊猫分组数据帧 - 蟒
PRODUCT_ID SALE_DATE SALE_PRICE PROVIDER 1 01/02/16 25 1
1 02/10/16 60 1
1 01/11/16 63 2
1 09/10/16 65 3
2 11/11/15 54 1
2 13/01/16 34 2
3 19/05/14 45 1
3 15/10/15 38 1
3 16/06/14 53 2
3 18/10/15 58 2
这是一个组合数据集,由不同的供应商所提供的数据,对每个销售没有共同的标识符。这里的问题是每个数据提供者在每次销售时都会有略微不同的日期和价格。所以我试图将它们组合在一起作为单组销售。因此,这里的业务逻辑是数据提供者1是第一个获得销售数据,因此对于产品ID,如果来自提供者2或3的销售日期在1个月时间内并且价格在10美元差异内(或多或少) ,我们认为它们是相同的销售,否则将被视为不同的销售。所以,输出应该看起来像,
PRODUCT_ID SALE_DATE SALE_PRICE PROVIDER SALE_GROUP_ID 1 01/02/16 25 1 1
1 02/10/16 60 1 2
1 01/11/16 63 2 2
1 09/10/16 65 3 2
2 11/11/15 54 1 3
2 13/01/16 34 2 4
3 19/05/14 45 1 5
3 15/10/15 38 1 6
3 16/06/14 53 2 5
3 18/10/15 58 2 7
如何在熊猫中实现这一点,有人可以帮助吗?谢谢。
回答:
我们可以使用groupby
后sort_values
df.SALE_DATE=pd.to_datetime(df.SALE_DATE,format='%d/%m/%y') df=df.sort_values(['PRODUCT_ID','SALE_DATE','SALE_PRICE'])
df1=df.copy()
df1=df.copy().sort_index()
df1['SALE_GROUP_ID']=df.groupby([df['PRODUCT_ID'],(df['SALE_DATE'].diff().abs()/np.timedelta64(1, 'M')).lt(1).ne(1).cumsum(),df['SALE_PRICE'].diff().lt(10).ne(1).cumsum()]).ngroup().add(1).sort_index().values
df1
Out[294]:
PRODUCT_ID SALE_DATE SALE_PRICE PROVIDER SALE_GROUP_ID
0 1 2016-02-01 25 1 1
1 1 2016-10-02 60 1 2
2 1 2016-11-01 63 2 2
3 1 2016-10-09 65 3 2
4 2 2015-11-11 54 1 3
5 2 2016-01-13 34 2 4
6 3 2014-05-19 45 1 5
7 3 2015-10-15 38 1 6
8 3 2014-06-16 53 2 5
9 3 2015-10-18 58 2 7
更多信息:你需要3个条件得到了组时,
1. PRODUCT_ID 2. Date different within in 1 month
3. SALE_PRICE different less than 10
(df['SALE_DATE'].diff().abs()/np.timedelta64(1, 'M')).lt(1).ne(1).cumsum()
,是getthing一个月内组日期
(df['SALE_DATE'].diff().abs()/np.timedelta64(1, 'M')).lt(1).ne(1).cumsum() Out[274]:
0 1
1 2
3 2
2 2
4 3
5 4
6 5
8 5
7 6
9 6
Name: SALE_DATE, dtype: int32
df['SALE_PRICE'].diff().lt(10).ne(1).cumsum()
是在10
df['SALE_PRICE'].diff().lt(10).ne(1).cumsum() Out[275]:
0 1
1 2
3 2
2 2
4 2
5 2
6 3
8 3
7 3
9 4
Name: SALE_PRICE, dtype: int32
得到的值groupby
我们只是结合(获得的各组条件的交点)后,然后我们使用ngroup
获得组ID
以上是 大熊猫分组数据帧 - 蟒 的全部内容, 来源链接: utcz.com/qa/260443.html