Pandas 如何在保留所有原始数据的同时聚合数据帧?

Pandas 如何在保留所有原始数据的同时聚合数据帧?,pandas,dataframe,aggregation,Pandas,Dataframe,Aggregation,我的目标是聚合数据帧,通过标识字段对行进行分组。值得注意的是,我不只是收集组的汇总统计数据,我还想保留数据框中的所有信息,以及诸如平均值、标准差等汇总统计数据。我已经通过大量迭代执行了此转换,但我正在寻找一种更干净/更具python风格的方法。值得注意的是,每个组可能有多于或少于2个重复,但所有组的重复数始终相同 我想翻译下面的格式 df = pd.DataFrame([ ["group1", 4, 10], ["group1", 8, 2

我的目标是聚合数据帧,通过标识字段对行进行分组。值得注意的是,我不只是收集组的汇总统计数据,我还想保留数据框中的所有信息,以及诸如平均值、标准差等汇总统计数据。我已经通过大量迭代执行了此转换,但我正在寻找一种更干净/更具python风格的方法。值得注意的是,每个组可能有多于或少于2个重复,但所有组的重复数始终相同

我想翻译下面的格式

df = pd.DataFrame([
    ["group1", 4, 10],
    ["group1", 8, 20],
    ["group2", 6, 30],
    ["group2", 12, 40],
    ["group3", 1, 50],
    ["group3", 3, 60]], 
  columns=['group','timeA', 'timeB'])

print(df)

    group  timeA  timeB
0  group1      4     10
1  group1      8     20
2  group2      6     30
3  group2     12     40
4  group3      1     50
5  group3      3     60
转换为以下格式的df:

target = pd.DataFrame([
    ["group1", 4, 8, 6, 10, 20, 15],
    ["group2", 6, 12, 9, 30, 45, 35],
    ["group3", 1, 3, 2, 50, 60, 55]
], columns = ["group", "timeA.1", "timeA.2", "timeA.mean", "timeB.1", "timeB.2", "timeB.mean"])

print(target)

    group  timeA.1  timeA.2  timeA.mean  timeB.1  timeB.2  timeB.mean
0  group1        4        8           6       10       20          15
1  group2        6       12           9       30       45          35
2  group3        1        3           2       50       60          55
最后,列名是什么并不重要,这些列名只是为了让示例更加清晰。谢谢

编辑:根据用户在评论中的建议,我尝试了链接Q/a的解决方案,但没有成功:

df.insert(0, 'count', df.groupby('group').cumcount())
df.pivot(*df)

TypeError: pivot() takes from 1 to 4 positional arguments but 5 were given

尝试使用透视表:

out = (df.assign(col=df.groupby('group').cumcount()+1)
   .pivot_table(index='group', columns='col', 
                margins='mean', margins_name='mean')
   .drop('mean')
)
out.columns = [f'{x}.{y}' for x,y in out.columns]
输出:

        timeA.1  timeA.2  timeA.mean  timeB.1  timeB.2  timeB.mean
group                                                             
group1      4.0      8.0         6.0       10       20          15
group2      6.0     12.0         9.0       30       40          35
group3      1.0      3.0         2.0       50       60          55

请尝试dup链接中问题10和11的解决方案。感谢您查看我的问题。不幸的是,问题10+11的答案不起作用,因为pivot最多只包含4个位置参数。请用您尝试的内容和失败的内容更新您的问题。我来回答这个问题。现在还不太清楚你想做哪些转换,但是如果你想保留这个结构,通常groupby+transform可以很好地工作