我觉得有一种比这更好的方法:
import pandas as pd
df = pd.DataFrame(
[['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
columns=['c1', 'c2', 'v1'])
def callback(x):
x['seq'] = range(1, x.shape[0] + 1)
return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df
Run Code Online (Sandbox Code Playgroud)
为达到这个:
c1 c2 v1 seq
0 A X 3 1
1 A X 5 2
2 A …Run Code Online (Sandbox Code Playgroud) 考虑以下DataFrame:
value
item_uid created_at
0S0099v8iI 2015-03-25 10652.79
0F01ddgkRa 2015-03-25 1414.71
0F02BZeTr6 2015-03-20 51505.22
2015-03-23 51837.97
2015-03-24 51578.63
2015-03-25 NaN
2015-03-26 NaN
2015-03-27 50893.42
0F02BcIzNo 2015-03-17 1230.00
2015-03-23 1130.00
0F02F4gAMs 2015-03-25 1855.96
0F02Vwd6Ou 2015-03-19 5709.33
0F04OlAs0R 2015-03-18 321.44
0F05GInfPa 2015-03-16 664.68
0F05PQARFJ 2015-03-18 1074.31
2015-03-26 1098.31
0F06LFhBCK 2015-03-18 211.49
0F06ryso80 2015-03-16 13.73
2015-03-20 12.00
0F07gg7Oth 2015-03-19 2325.70
Run Code Online (Sandbox Code Playgroud)
我需要采样两个日期之间的完整数据帧start_date和end_date他们之间的每一个日期,传播最后看到的值.抽样应在每个item_uid独立/分开进行.
例如,如果我们要在for 2015-03-20和2015-03-29for 之间进行采样0F02BZeTr6,我们应该得到:
0F02BZeTr6 2015-03-20 51505.22
2015-03-21 51505.22
2015-03-22 51505.22
2015-03-23 51837.97 …Run Code Online (Sandbox Code Playgroud) 我的问题与此链接中发布的问题非常相似 - 如何在没有临时表的SQL查询中为组添加序列号
但是,我需要列举组的发生.最终输出如下:
Record Group GroupSequence
-------|---------|--------------
1 Chickens 1
2 Chickens 2
3 Cows 1
4 Horses 1
5 Horses 2
6 Horses 3
Run Code Online (Sandbox Code Playgroud)
此外,这必须在Oracle SQL中完成.有任何想法吗?