python 如何透视数据帧

python how to pivot a dataframe

提问人:Lok 提问时间:7/14/2023 最后编辑:AndromedaLok 更新时间:7/15/2023 访问量:53

问:

我有一个问题。所以我有一张看起来像这样的桌子dataframedataframeenter image description here

我想把它转向这个enter image description here

我尝试了这段代码:

m = df['4'].str.match('\d', na=False)

out = df.where(m, axis=0).ffill()[~m].join(df[~m], rsuffix=('_')).iloc[:, :-1]

out.columns = range(len(out.columns))

结果变为:enter image description here

有没有办法做到这一点?我尝试过取消堆栈,但似乎并没有像我预期的那样工作。谢谢大家!

在 Python 中透视 Pandas 数据帧

Python Pandas 数据帧

评论

0赞 jezrael 7/14/2023
什么是列名? ?0,1,2,3
0赞 Lok 7/14/2023
列名为 1、2、3、4
0赞 jezrael 7/14/2023
这似乎是与数据相关的问题,是什么?你能通过以下方式补充问题吗?print (df.head(10).to_dict())edit
0赞 sammywemmy 7/14/2023
如果可以,请共享源文件

答:

1赞 jezrael 7/14/2023 #1

如果调用最后一列,请使用 Series.str.contains 来标识行的标题,将 s 的下一个值替换为 DataFrame.where 并转发填充缺失值,添加下一个值,例如 DataFrame.join 中的新列,并在最后一步中通过重新签名列名称删除最后一列:3NaNiloc

m = df[3].str.contains('\d', na=False)

out = df.where(m, axis=0).ffill()[~m].join(df[~m], rsuffix=('_')).iloc[:, :-1]
out.columns = range(len(out.columns))
print (out)
   0     1        2           3       4    5    6
1  B  RATE  England  02/02/2023  rate 1  3.5    4
2  B  RATE  England  02/02/2023  rate 2    4  4.5
4  U  RATE  England  02/02/2023  rate 1  3.5    4
5  U  RATE  England  02/02/2023  rate 2    4  4.5
7  B  RATE    Wales  02/02/2023  rate 1  3.5    4
8  B  RATE    Wales  02/02/2023  rate 2    4  4.5

评论

0赞 Lok 7/14/2023
您好,感谢您的快速回复。我已经尝试了您的代码,但它只用“B”透视行,结果看起来像 B 评分 英格兰 02/02/2023 评分 1 3.5 4 B 评分 英格兰 02/02/2023 评分 2 4 4.5 B 评分 英格兰 02/02/2023 U 评分 02/02/2023
0赞 Lok 7/14/2023
df.b.head().tolist() 不起作用,出现错误消息 ' DataFrame 对象没有属性 'b'
0赞 Lok 7/14/2023
这个不起作用:Int64Index([1, 2, 3, 4], dtype='int64'),错误消息是“名称 int64index”未定义
0赞 Lok 7/14/2023
我尝试了 m = df['4'].str.match('\d', na=False),但它仍然可以透视以“B”开头的行,但不能以“U”开头的行
1赞 Lok 7/14/2023
嗨,@jezrael,它现在正在工作!谢谢