我的样本数据如下所示:
data = {'index': ['001', '002', '003'],
'A' : ['red', 'green', 'blue'],
'B' : ['blue', 'yellow', 'green'],
'C' : ['green', 'blue', 'red'],
'A_new' : [2, 1, 3], 'B_new' : [0, 1, 2], 'C_new' : [0, 0, 1],
'A_old' : [1, 0, 1], 'B_old' : [1, 0, 0], 'C_old' : [0, 0, 2],
'A_other_new' : [2, 0, 1], 'A_other_old' : [1, 1, 0]}
df = pd.DataFrame (data, columns = ['index', 'A', 'B', 'C', 'A_new', 'B_new', 'C_new',
'A_old', 'B_old', 'C_old', 'A_other_new', 'A_other_old'])
df
输出:
index A B C A_new B_new C_new A_old B_old C_old A_other_new A_other_old
0 001 red blue green 2 0 0 1 1 0 2 1
1 002 green yellow blue 1 1 0 0 0 0 0 1
2 003 blue green red 3 2 1 1 0 2 1 0
我正在尝试 'C'
根据索引和其他列将列从列 移到行,但是由于我只是一个初学者并且正在学习Pandas,所以很难。点是列之后移动成列的每个1值 'C'
到一个新的行,通过柱连接 'index'
, 'color'
, 'letter'
和 'reference'
到原始数据帧。在column下 'reference'
,如果原始数据列 'A_other_new'
或 'A_other_old'
> 0, 'OX'
则每个+1值都需要有一个标记 (O是字母,X是数字)。这部分很重要,我无法跳过,因为我需要执行其他步骤。
有人对如何解决这个问题有想法吗?
index color letter reference age
00 001 red A A1 new
01 001 red A A2 new
02 001 red A A3 old
03 001 red A O1 new
04 001 red A O2 new
05 001 red A O3 old
06 001 blue B B1 old
07 001 green C C1 0
08 002 green A A1 new
09 002 green A O1 old
10 002 yellow B B1 new
11 002 blue C C1 0
12 003 blue A A1 new
13 003 blue A A2 new
14 003 blue A A3 new
15 003 blue A A4 old
16 003 blue A O1 new
17 003 green B B1 new
18 003 green B B2 new
19 003 red C C1 new
20 003 red C C2 old
21 003 red C C3 old
不确定我是否了解other
您所需的输出中的列,但是您可以melt
在此处使用。如果您能解释一下其他方式会更好:
df = df.melt(id_vars=['index', 'A', 'B', 'C'],
var_name='other')
df['age'] = df['other'].str.split('_').str[1]
df['letter'] = df['other'].str.split('_').str[0]
print(df)
index A B C other value age letter
0 001 red blue green A_new 2 new A
1 002 green yellow blue A_new 1 new A
2 003 blue green red A_new 3 new A
3 001 red blue green B_new 0 new B
4 002 green yellow blue B_new 1 new B
5 003 blue green red B_new 2 new B
6 001 red blue green C_new 0 new C
7 002 green yellow blue C_new 0 new C
8 003 blue green red C_new 1 new C
9 001 red blue green A_old 1 old A
10 002 green yellow blue A_old 0 old A
11 003 blue green red A_old 1 old A
12 001 red blue green B_old 1 old B
13 002 green yellow blue B_old 0 old B
14 003 blue green red B_old 0 old B
15 001 red blue green C_old 0 old C
16 002 green yellow blue C_old 0 old C
17 003 blue green red C_old 2 old C
18 001 red blue green A_other_new 2 other A
19 002 green yellow blue A_other_new 0 other A
20 003 blue green red A_other_new 1 other A
21 001 red blue green A_other_old 1 other A
22 002 green yellow blue A_other_old 1 other A
23 003 blue green red A_other_old 0 other A
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句