使用循环根据数据

时间:2016-05-24 15:26:44

标签: python pandas dataframe conditional

如果我的数据框就像

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),然后将公式拖下来!

1 个答案:

答案 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