Python 有没有办法用pandas聚合来解决这个多条件groupby?

Python 有没有办法用pandas聚合来解决这个多条件groupby?,python,python-3.x,pandas,indexing,pandas-groupby,Python,Python 3.x,Pandas,Indexing,Pandas Groupby,我被这个复杂的groupby困在多个条件下。如果你能帮忙,我会非常感激的 输入数据帧: 我需要这种输出: 现在,我需要基于每个唯一的\u ID的groupby,如果\u Car\u和\u History==1,我需要每行的值和相同原始值的平均值 现在我正试图用这段代码解决这个问题,这需要时间: import pandas as pd data = [[1,120789,"2012-07-03",0,1000,500]\ , [1,232101,"2015-05-06",1,2300

我被这个复杂的groupby困在多个条件下。如果你能帮忙,我会非常感激的

输入数据帧:

我需要这种输出:

现在,我需要基于每个唯一的\u ID的groupby,如果\u Car\u和\u History==1,我需要每行的值和相同原始值的平均值

现在我正试图用这段代码解决这个问题,这需要时间:

import pandas as pd

data = [[1,120789,"2012-07-03",0,1000,500]\
    , [1,232101,"2015-05-06",1,2300,700]\
    , [1,329911,"2016-05-19",1,4000,1000]\
    ,[2,129088,"2011-01-01",0,1200,400]\
    , [2,876541,"2013-03-01",1,1000,600]\
    , [2,864347,"2014-05-03",0,3000,1000]\
    , [2,987659,"2015-01-01",1,3200,700]] 

df = pd.DataFrame(data,columns =["Unique_ID","Transaction_ID","Date","IF_Car_with_History","Value","Amount"])
for i in data.Unique_ID.unique():
    df=data[data['Unique_ID']==i].reset_index(drop=True)
    idx=df[df['IF_Car_with_History']==1].reset_index()['index'].tolist()
    for s in idx:
        tmp=pd.DataFrame()
        hpa = df.iloc[s]["Transaction_ID"]
        tmp=df.iloc[:s]
        T_no = tmp["Transaction_ID"].iloc[-1]

        # print(tmp.columns)
        tmp=tmp.groupby(['Unique_ID'],as_index=False)\
         .agg(Value= ('Value','sum')\
               ,Amount= ('Amount','mean')).reset_index(drop=True)         
        # print(tm2)

        tmp["T_no"] = 0        
        tmp["T_no"][0] = T_no
        tmp["HPA"] = 0 
        tmp['HPA'][0]=hpa
        test_df = test_df.append(tmp)

此代码段花费了很长时间。有更好的解决方法吗?

您可以这样做,按
唯一的\u ID
如果有历史记录的\u Car\u进行分组,然后找到
值的
平均值
,并连接
事务\u ID

df['Transaction_ID'] = df['Transaction_ID'].astype(str)
print(df.groupby(by=['Unique_ID', 'IF_Car_with_History'], as_index=False).agg(
    {'Amount': ['sum'],
    'Value': ['sum', 'mean'],
    'Transaction_ID': ', '.join,
    }))
输出

  Unique_ID IF_Car_with_History Amount Value        Transaction_ID
                                   sum   sum  mean            join
0         1                   0    500  1000  1000          120789
1         1                   1   1700  6300  3150  232101, 329911
2         2                   0   1400  4200  2100  129088, 864347
3         2                   1   1300  4200  2100  876541, 987659

请不要共享数据pics@sammywemmy我也添加了数据。Thanks@jezrael如果你能帮我的话。对于你的回答,这将是greatThanks@NYC,但我的预期输出是不同的。