使用循环根据数据中的条件修改 Pandas Dataframe

Use Loop to modify Pandas Dataframe based on condition in data

如果我的数据框像

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()

我不知道如何使用 normal[][boolean condition],所以也许最好使用循环读取 dataframe1、修改它并保存到 dataframe2?

基本上(使用 Excel 项)从上面的行中获取值,但如果遇到标记另一个开始的标志则跳过! Exceld2中的公式=if(b2>b1,A1,A2),则将公式往下拉!

如果我理解正确,你可以使用 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