Pandas:将多个表数据透视到单个表中并计算发生次数

2024-09-29 09:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个透视表,将多个(超过8个)数据帧连接到一个透视表中

这些表有多个列,但在这里我将保持简单:

Table1

week        project 
42          ABC
42          FGA
42          ZTR
44          HTZ
44          UZR
44          LOP
46          POL
46          ZTT
46          ART
46          ART
...

在某些星期内,可能不会发生任何项目。表2、3、4等的每周发生次数肯定会有所不同

所有表中唯一的公共列包含在“周”列中。有些表的列数较多,但列数较少,列标题也可能有所不同。“周”列是所有列中唯一通用的列,并且,正如我所假设的,在这里可以单独使用。

我的目标是统计每周在所有表中出现的次数。最终,我想要实现的是:

index  table1  table2  table3  table4  table5
42       3       3       4       11      23
43       0       4       10      15      7
44       3       12      8       9       1
45       0       7       0       0       8
46       4       6       7       0       22
47       8       3       12      6       0

在excel中,这样的计算非常简单,只需使用带有计数的数据透视表即可。 在这种情况下,我将如何在Python中继续


Tags: 数据项目project次数abcweekarttable1
1条回答
网友
1楼 · 发布于 2024-09-29 09:24:51

您可以将concatkeys参数一起使用,并将后续的groupbyunstack一起使用

这里需要注意的是,如果手动推断键,那么最好每个表都有一个id来显示它来自哪个源

tables = [df1,df2] # if you want to make the keys dynamic, 
#tables = table_dict = dict(zip([f'table {i}' for i in range(1,len(tables) + 1)],tables))

df_new = (
    pd.concat(tables, axis=0, keys=["table1", "table2"])
    .set_index("week", append=True)
    .groupby(level=[0, 2])
    .count()
    .unstack(0)
)

     project       
      table1 table2
week               
42         3      3
44         3      3
46         4      4

相关问题 更多 >