pandas合并groupby_python – pandas groupby可以聚合成一个列表,...

我的解决方案比你预期的要长一点,我确信它可以缩短,但是:

g = df.groupby("A").apply(lambda x: pd.concat((x["B"], x["C"])))

k = g.reset_index()

k["i"] = k1.index

k["rn"] = k1.groupby("A")["i"].rank()

k.pivot_table(rows="A", cols="rn", values=0)

# output

# rn 1 2 3 4 5 6

# A

# 1 10 12 11 22 20 8

# 2 10 11 10 13 NaN NaN

# 3 14 10 NaN NaN NaN NaN

一点解释.第一行,g = df.groupby(“A”).apply(lambda x:pd.concat((x [“B”],x [“C”]))).这一组由A组成,然后将B和C列放入一列:

A

1 0 10

1 12

2 11

0 22

1 20

2 8

2 3 10

4 11

3 10

4 13

3 5 14

5 10

然后k = g.reset_index(),创建顺序索引,结果是:

A level_1 0

0 1 0 10

1 1 1 12

2 1 2 11

3 1 0 22

4 1 1 20

5 1 2 8

6 2 3 10

7 2 4 11

8 2 3 10

9 2 4 13

10 3 5 14

11 3 5 10

现在我想把这个索引移到列中(我想听听如何在没有重置索引的情况下创建顺序列),k [“i”] = k1.index:

A level_1 0 i

0 1 0 10 0

1 1 1 12 1

2 1 2 11 2

3 1 0 22 3

4 1 1 20 4

5 1 2 8 5

6 2 3 10 6

7 2 4 11 7

8 2 3 10 8

9 2 4 13 9

10 3 5 14 10

11 3 5 10 11

现在,k [“rn”] = k1.groupby(“A”)[“i”].rank()将在SQL中添加row_number(如row_number()over(按A顺序划分):

A level_1 0 i rn

0 1 0 10 0 1

1 1 1 12 1 2

2 1 2 11 2 3

3 1 0 22 3 4

4 1 1 20 4 5

5 1 2 8 5 6

6 2 3 10 6 1

7 2 4 11 7 2

8 2 3 10 8 3

9 2 4 13 9 4

10 3 5 14 10 1

11 3 5 10 11 2

最后,只需使用k.pivot_table(rows =“A”,cols =“rn”,values = 0)进行旋转:

rn 1 2 3 4 5 6

A

1 10 12 11 22 20 8

2 10 11 10 13 NaN NaN

3 14 10 NaN NaN NaN NaN


版权声明:本文为weixin_29218963原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。