gpt4 book ai didi

python - Pandas - 堆叠和重命名列

转载 作者:行者123 更新时间:2023-11-28 20:14:39 25 4
gpt4 key购买 nike

我在下面构建了一个数据框 (df2),其中一些列名称具有 #/# 形式的后缀。这些后缀中的第一个数字将与相应“A”列中的数字后缀相匹配:

import pandas as pd 

df1 = pd.DataFrame( { 'A': ['X', 'X1', 'X1', 'X2', 'X2', 'X2', 'X2', 'X3', 'X3' ],
'Property': [ 'p', 'p', 'p1/1', 'p', 'p2/1', 'p2/2', 'p2/3', 'p3/1', 'p3/2' ],
'Value': [ 'u', 'v', 'a', 't', 'a', 'b', 'c', 'a', 'b' ] } )

print df1

A Property Value
0 X p u
1 X1 p v
2 X1 p1/1 a
3 X2 p t
4 X2 p2/1 a
5 X2 p2/2 b
6 X2 p2/3 c
7 X3 p3/1 a
8 X3 p3/2 b

indices = [ col for col in df1.columns.tolist() if col != 'Value' ]
df2 = df1.set_index( indices )[ 'Value' ].unstack( 'Property' ).reset_index().fillna('-')
print df2

A p p1/1 p2/1 p2/2 p2/3 p3/1 p3/2
0 X u - - - - - -
1 X1 v a - - - - -
2 X2 t - a b c - -
3 X3 - - - - - a b

我如何在 df2 上使用堆栈(或其他一些方法)来实现如下所示的数据框,我在其中通过添加新列 x 来压缩一些信息,以识别原始 #/# 后缀中的第一个数字数据框?

    A  p  px/1  px/2  px/3  x
0 X u - - - -
1 X1 v a - - 1
2 X2 t a b c 2
3 X3 - a b - 3

请注意,如果有一种方法可以直接从 df1 完成此操作,那将是最适合我的情况,但是修改 df2 可能更适合其他人的常见用例。

最佳答案

从头开始改

df1.Property=('px/'+df1.Property.str.split('/',expand=True)[1]).fillna(df1.Property)
df2 = df1.set_index( indices )[ 'Value' ].unstack( 'Property' ).reset_index()
df2
Out[1360]:
Property A p px/1 px/2 px/3
0 X u None None None
1 X1 v a None None
2 X2 t a b c
3 X3 None a b None

关于python - Pandas - 堆叠和重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48913780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com