我有一个pandas DataFrame,其中包含我想提取到新列中的列中的信息。
最好从视觉上进行解释:
df = pd.DataFrame({'Number Type 1':[1,2,np.nan],
'Number Type 2':[np.nan,3,4],
'Info':list('abc')})
该表显示了带有Number Type 1
和NumberType 2
列的初始DataFrame。
我想提取类型并创建一个新的Type
列,从而相应地重构DataFrame。
基本上,数字会折叠到Number
列中,并将类型提取到Type
列中。 Info
列中的信息与数字绑定(例如2和3具有相同的信息b)
在熊猫中做到这一点的最佳方法是什么?
答案 0 :(得分:2)
df = df.melt('Info', value_name='Number', var_name='Type').dropna(subset=['Number'])
df['Type'] = df['Type'].str.extract('(\d+)')
df['Number'] = df['Number'].astype(int)
print (df)
Info Type Number
0 a 1 1
1 b 1 2
4 b 2 3
5 c 2 4
df = df.set_index('Info').stack().rename_axis(('Info','Type')).reset_index(name='Number')
df['Type'] = df['Type'].str.extract('(\d+)')
df['Number'] = df['Number'].astype(int)
print (df)
Info Type Number
0 a 1 1
1 b 1 2
2 b 2 3
3 c 2 4