使用循环根据数据中的条件修改 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
如果我的数据框像
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