如何根据应用于多列的分析条件创建包含有序列表的 pandas 数据框

How to create a pandas dataframe that contains ordered lists based on analysis conditions applied on multiple columns

我正在做一个 Python 项目,它有一个像这样的数据框:

col = {
        'ID': ['123.abc', '123.abc', '123.abc', '456.efg', '456.efg', '123.abc', '123.abc', '789.hij'],
        'Content': ['AAA', 'BBB', 'CCC', 'BBB', 'DDD', 'AAA', 'CCC', 'AAA'],
        'Visit sequence': ['1', '2', '3', '1', '2', '1', '2', '1'],
        'Value': ['0', '0', '5.21', '0', '9.74', '0', '0', '3.83']}
df = pd.DataFrame(col)

这导致以下数据table:

ID Content Visit sequence Value
123.abc AAA 1 0
123.abc BBB 2 0
123.abc CCC 3 5.21
456.efg BBB 1 0
456.efg DDD 2 9.74
123.abc AAA 1 0
123.abc CCC 2 0
789.hij AAA 1 3.83

任务包括生成以下数据帧:

ID Journey Value
123.abc AAA, BBB, CCC 5
123.abc AAA, CCC 0
456.efg BBB, DDD 4
789.hij AAA 1

其中 Journey 列包含 Contents 的列表,直到在 Value 列中获得金额。在Value栏中找不到金额的内容也被认为是旅程,如您所见ID 123.abc.

的情况

你能帮我推荐一个解决这个任务的代码吗?我有点找到了这个任务的解决方案,但是由于我使用了很多循环函数,所以我无法将该算法应用于更大的数据库,因为时间处理太长了。

老实说,我不清楚值列,但我会提供我的解决方案,其中只有此列的最终计算 missing/not 正确。也许它很简单,您可以轻松适应:

i = df.ID    
df["group"] = i.ne(i.shift()).cumsum()
df2 = df[["ID", "group","Content", "Value"]].groupby(["ID", "group"]). \
    agg({'Content' : ','.join, 
         "Value":"last"}).reset_index()

df2 = df2.rename(columns={"Content":"Journey"}).drop("group", axis=1)

输出:

    ID              Journey         Value
0   123.abc         AAA,BBB,CCC     5.21
1   123.abc         AAA,CCC         0
2   456.efg         BBB,DDD         9.74
3   789.hij         AAA             3.83

通过 'ID' 和非 0 'Value' 的 cumsum 进行分组就可以了:

df2 = (df.groupby([df['ID'], ((df['Value']!='0').shift().fillna(0)).cumsum()], as_index=False)
    .agg({'Content' : ','.join, 'Value':'last'})
)

输出:

    ID       Content        Value
--  -------  -----------  -------
 0  123.abc  AAA,BBB,CCC     5.21
 1  123.abc  AAA,CCC         0
 2  456.efg  BBB,DDD         9.74
 3  789.hij  AAA             3.83