在已知列中命名的列中插入值

2024-09-24 16:41:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为机器学习准备数据,数据在数据框中,如下所示:

Column   v1    v2
first    1      2
second   3      4
third    5      6

现在我想把它变成:

Column  v1  v2  first-v1  first-v2  second-v1  econd-v2  third-v1  third-v2
first   1   2     1        2         Nan        Nan       Nan      Nan
second  3   4     Nan      Nan       3          4         Nan      Nan
third   5   6     Nan      Nan       Nan        Nan       5        6

我试着这样做:

# we know how many values there are but 
# length can be changed into length of [1, 2, 3, ...] values
values = ['v1', 'v2']

# data with description from above is saved in data 
for value in values:
    data[ str(data['Column'] + '-' + value)] = data[ value]

结果是名称为的列: ['first-v1' 'second-v1'..], ['first-v2' 'second-v2'..] 有正确值的地方。我做错了什么?因为我的数据很大,有没有更理想的方法?你知道吗

谢谢你的时间!你知道吗


Tags: 数据in机器datavaluecolumnnanlength
1条回答
网友
1楼 · 发布于 2024-09-24 16:41:26

您可以将^{}用于交换和排序MultiIndex列:

df = data.set_index('Column', append=True)[values].unstack()
         .swaplevel(0,1, axis=1).sort_index(1)
df.columns = df.columns.map('-'.join)
print (df)
   first-v1  first-v2  second-v1  second-v2  third-v1  third-v2
0       1.0       2.0        NaN        NaN       NaN       NaN
1       NaN       NaN        3.0        4.0       NaN       NaN
2       NaN       NaN        NaN        NaN       5.0       6.0

^{}+^{}

df = data.set_index('Column', append=True).stack().unstack([1,2])
df.columns = df.columns.map('-'.join)
print (df)
   first-v1  first-v2  second-v1  second-v2  third-v1  third-v2
0       1.0       2.0        NaN        NaN       NaN       NaN
1       NaN       NaN        3.0        4.0       NaN       NaN
2       NaN       NaN        NaN        NaN       5.0       6.0

最后join到原始:

df = data.join(df)
print (df)
   Column  v1  v2  first-v1  first-v2  second-v1  second-v2  third-v1  \
0   first   1   2       1.0       2.0        NaN        NaN       NaN   
1  second   3   4       NaN       NaN        3.0        4.0       NaN   
2   third   5   6       NaN       NaN        NaN        NaN       5.0   

   third-v2  
0       NaN  
1       NaN  
2       6.0  

相关问题 更多 >