Pandas DataFrames:提取信息并折叠列

时间:2019-02-27 10:28:07

标签: python pandas dataframe

我有一个pandas DataFrame,其中包含我想提取到新列中的列中的信息。

最好从视觉上进行解释:

df = pd.DataFrame({'Number Type 1':[1,2,np.nan],
                   'Number Type 2':[np.nan,3,4],
                   'Info':list('abc')})

Initial DataFrame

该表显示了带有Number Type 1NumberType 2列的初始DataFrame。 我想提取类型并创建一个新的Type列,从而相应地重构DataFrame。

Refactored DataFrame

基本上,数字会折叠到Number列中,并将类型提取到Type列中。 Info列中的信息与数字绑定(例如2和3具有相同的信息b)

在熊猫中做到这一点的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

meltdropna一起使用:

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

使用set_indexstack的另一种解决方案:

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