[英]Pandas: Merging columns in a data frame with new columns created for the common variables
我有以下數據框:
ID,SomeValue,FooA1,FooA2,FooA3,FooB1,FooB2,FooB3,BarA1,BarA2,BarA3,BarB1,BarB2,BarB3
1 ,val1 ,4 ,7 ,2 ,8 ,1 ,3 ,2 ,9 ,2 ,0 ,9 ,2
2 ,val2 ,2 ,3 ,8 , , , ,1 ,5 ,3 , , ,
.
.
並且我想合並列“ [Foo | Bar] [A | B] \\ d +”,使它們變為以下形式,即合並多個列的不同組合,並創建適當的新列以包含表示以下內容的變量這些變化:
ID,SomeValue,FooBar ,AB ,Num ,Val
1 ,val1 ,Foo ,A ,1 ,4
1 ,val1 ,Foo ,A ,2 ,7
1 ,val1 ,Foo ,A ,3 ,2
1 ,val1 ,Foo ,B ,1 ,8
1 ,val1 ,Foo ,B ,2 ,1
1 ,val1 ,Foo ,B ,3 ,3
1 ,val1 ,Bar ,A ,1 ,2
1 ,val1 ,Bar ,A ,2 ,9
1 ,val1 ,Bar ,A ,3 ,2
1 ,val1 ,Bar ,B ,1 ,0
1 ,val1 ,Bar ,B ,2 ,9
1 ,val1 ,Bar ,B ,3 ,2
2 ,val2 ,Foo ,A ,1 ,2
2 ,val2 ,Foo ,A ,2 ,3
2 ,val2 ,Foo ,A ,3 ,8
2 ,val2 ,Bar ,A ,1 ,1
2 ,val2 ,Bar ,A ,2 ,5
2 ,val2 ,Bar ,A ,3 ,3
請注意,可以有空值,例如在上面的第2行中,這些值不應包含在最終集中。
這必須非常簡單,但是我是熊貓的新手,並且正在努力尋找合適的命令來使用。
在此先感謝您的幫助。
您可以使用:
DataFrame.set_index
與unstack
的重塑,最后index
由列reset_index
DataFrame.pop
與extrah列str.extract
通過正則表達式解析 reindex_axis
用於更改列的順序 df = df.set_index(['ID','SomeValue']).stack().reset_index(name='Val')
df[['FooBar','AB','Num']] = df.pop('level_2').str.extract('(Foo|Bar)(A|B)(\d+)', expand=True)
cols = ['ID', 'SomeValue', 'FooBar', 'AB', 'Num','Val']
df = df.reindex_axis(cols, axis=1)
print (df)
ID SomeValue FooBar AB Num Val
0 1 val1 Foo A 1 4.0
1 1 val1 Foo A 2 7.0
2 1 val1 Foo A 3 2.0
3 1 val1 Foo B 1 8.0
4 1 val1 Foo B 2 1.0
5 1 val1 Foo B 3 3.0
6 1 val1 Bar A 1 2.0
7 1 val1 Bar A 2 9.0
8 1 val1 Bar A 3 2.0
9 1 val1 Bar B 1 0.0
10 1 val1 Bar B 2 9.0
11 1 val1 Bar B 3 2.0
12 2 val2 Foo A 1 2.0
13 2 val2 Foo A 2 3.0
14 2 val2 Foo A 3 8.0
15 2 val2 Foo B 1 1.0
16 2 val2 Foo B 2 5.0
17 2 val2 Foo B 3 3.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.