如何在熊猫数据框中创建序列?

时间:2018-08-19 10:52:07

标签: python

大家好,我的数据格式如下:

User touchpoint conversion
A     C1            0
A     C2            0
A     C1            0
A     C4            1
A     C2            0
A     C1            0
A     C1            0
A     C1            1

我能够使用以下代码创建序列:

df1 = df.groupby('User')[['touchpoint']].aggregate(lambda x: tuple(x)).reset_index()

df1['channel_path'] = df1['touchpoint'].apply(lambda x: '>'.join(x))

但是,当我遇到转换值1时,我想将序列分成子序列,例如:

sequence 1 : C1>C2>C1>C4
sequence 2: C2>C1>C1>C1

使用当前代码,我得到了整个序列:

C1>C2>C1>C4>C2>C1>C1>C1

任何有关这方面的指示都将有所帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

我用另一种方法做到了。由于您未指定断点,因此df1具有所有组合。

尝试一下。

l = [i for i in range(len(data)) if data['conversion'][i] == 1]
pointer = 0
for pos in l:
    print('>'.join(data['touchpoint'][pointer:pos+1]))
    pointer = pos+1

答案 1 :(得分:0)

尝试一下

df = pd.DataFrame({'User': ['A','A','A','A','B','B','B', 'B'],
                 'touchpoint': ['C1', 'C2', 'C1', 'C4', 'C2', 'C1', 'C1', 'C1'],
                    'conversion': [0,0,0,1,0,0,0,1]})

df1 = df.groupby(['User']).aggregate(lambda x: list(x))
df1 = df1.apply(lambda x: "".join([x[1][i] + '*' if value else x[1][i] + '>' for i, value in enumerate(x[0])]), axis = 1)
df1 = df1.apply(lambda x: x.split('*')[:-1])

您只需添加一个特殊字符,例如*,以指示分割位置。

输出

User
A    [C1>C2>C1>C4]
B    [C2>C1>C1>C1]
dtype: object

这是一个索引为User

的系列对象