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']
中的行: