如果我的数据框就像
z = {
'Cust': ["a", "a", "a", "a", "a", "b", "b", "b", "b", "c", "d"],
'datediff': [1, 3, 9, 26, 30, 1, 2, 7, 10, 5, 7],
'row_number': [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 1],
'Referer': ["URL1", "URL2", "URL2", "URL1", "URL1", "URL3", "URL1", "URL1",
"URL1", "URL1", "URL1"]
}
df1 = pd.DataFrame(z)
Row_number标记每个客户的排序日期顺序(来自SQL处理数据),从SQL返回Datediff到上一次访问(记录)。 (如果需要,我可以添加日期栏)
我需要将每个客户访问的第一个URL(到派生列)填充到它下面的所有行(直到row_number恢复为1,标记另一个客户)。
这将允许我计算所有以某个URL开始的访问之间的所有datediff()(使用派生列的一些基本技巧),使用类似DF3_derived.groupby(['Referer'])的东西。['datediff' ] .mean()
我不知道如何使用普通[] [布尔条件]来做到这一点,所以最好用Loop读取dataframe1,修改它,然后保存到dataframe2?
基本上(使用Excel术语)从上面的行获取值,但是如果满足标记另一个开头的标志则跳过! Excel中的Excel公式= if(b2> b1,A1,A2),然后将公式拖下来!
答案 0 :(得分:1)
如果我理解正确,您可以使用与groupby()
结合的transform('first')
来执行此操作:
In [7]: df1.Referer = df1.groupby(['Cust'])['Referer'].transform('first')
In [8]: df1
Out[8]:
Cust Referer datediff row_number
0 a URL1 1 1
1 a URL1 3 2
2 a URL1 9 3
3 a URL1 26 4
4 a URL1 30 5
5 b URL3 1 1
6 b URL3 2 2
7 b URL3 7 3
8 b URL3 10 4
9 c URL1 5 1
10 d URL1 7 1