Python 选择一个组,然后将其余组转换为表中的列

Python 选择一个组,然后将其余组转换为表中的列,python,pandas,Python,Pandas,我有一个数据框,看起来像 import pandas as pd from pandas.compat import StringIO origin = pd.read_table(StringIO('''label type value x a 1 x b 2 y a 4 y b 5 z a 7 z c 9''')) origin Out[5]: label type value 0 x a 1 1

我有一个数据框,看起来像

import pandas as pd

from pandas.compat import StringIO

origin = pd.read_table(StringIO('''label    type    value
x   a   1
x   b   2
y   a   4
y   b   5
z   a   7
z   c   9'''))

origin
Out[5]:
  label type  value
0     x    a      1
1     x    b      2
2     y    a      4
3     y    b      5
4     z    a      7
5     z    c      9
我想把它转换成

  label type  value   y_value   z_value
0     x    a      1         4         7
1     x    b      2         5       NaN
此处y_值和z_值根据类型确定。

您可以使用:

输出:

type    x   y     z
a    1.0    4.0  7.0
b    2.0    5.0  NaN
c    NaN    NaN  9.0
过滤您需要的内容:

origin_temp = origin_temp.drop('c').reset_index()
origin_temp = origin_temp.drop('x',axis=1)
origin_temp = origin_temp[['y','z']]
origin_temp.columns = [ i + '_value' for i in origin_temp]
输出

    y_value z_value
0   4.0     7.0
1   5.0     NaN
然后过滤要保留的值

origin_temp_2 = origin[origin['label'] == 'x' ]
输出

    label   type    value
0   x       a       1
1   x       b       2
    y_value z_value label   type    value
0   4.0     7.0     x       a       1
1   5.0     NaN     x       b       2
最后,我们将两者结合起来:

origine_final = pd.concat([origin_temp, origin_temp_2],axis=1)
输出

    label   type    value
0   x       a       1
1   x       b       2
    y_value z_value label   type    value
0   4.0     7.0     x       a       1
1   5.0     NaN     x       b       2
您可以使用进行筛选,首先在
df2
中使用,然后使用,最后删除不在
df1['type']
中的行: