重新索引数据帧;使用多列中的元素填充索引

2024-09-28 05:23:30 发布

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

我有一个熊猫数据帧,如下所示:

            I1        V1         I2        V2         I3        V3    ...
0    13.823560  0.000000  13.639405  0.000000  13.455246  0.000000    ...
1    13.823376  0.001274  13.639224  0.001273  13.455068  0.001272    ...
2    13.823193  0.002547  13.639043  0.002546  13.454889  0.002544    ...
3    13.823009  0.003821  13.638862  0.003819  13.454711  0.003817    ...
4    13.822826  0.005095  13.638681  0.005092  13.454532  0.005089    ...
5    13.822642  0.006368  13.638500  0.006365  13.454354  0.006361    ...
...        ...       ...        ...       ...        ...       ...    ...
495   0.613282  0.630456   0.610912  0.630109   0.608497  0.629756    ... 
496   0.455202  0.631730   0.453456  0.631381   0.451677  0.631028    ... 
497   0.296663  0.633004   0.295533  0.632654   0.294383  0.632301    ...
498   0.137670  0.634277   0.137149  0.633927   0.136619  0.633573    ...  
499  -0.021770  0.635551  -0.021688  0.635200  -0.021605  0.634845    ...

[500 rows x 120 columns]

我想做的是重塑数据帧,使其看起来像这样:

#(I as new index)
    I            V1          V2          V3          ...
    13.823560    0.000000    NaN         NaN         ...
    13.823376    0.001274    NaN         NaN         ...
    13.823193    0.002547    NaN         NaN         ...
    13.823009    0.003821    NaN         NaN         ...
    13.822642    0.005095    NaN         NaN         ...
    ...          ...         ...         ...         ...
     0.137670    0.630456    NaN         NaN         ...
     0.136619    NaN         NaN         0.633573    ...
    -0.021605    NaN         NaN         0.634845    ...
    -0.021688    NaN         0.635200    NaN         ...
    -0.021770    0.635551    NaN         NaN         ...

    [30000 rows x 60 columns]

换句话说,我想用所有“I”标记的列(在我的例子中是1到60)中遇到的所有值填充新的DataFrame索引。但是,我也希望保持其余的V列暂时不被触动-只要它们仍然链接到其原始I对应值。你知道吗

尝试以下操作时。。。你知道吗

dfen = pd.melt(dfen, id_vars=['I'+str(b) for b in xrange(1,len(irlist)+1)], var_name='id', value_name='V')

。。。数据帧被压缩到只有两列,所以我想我需要一些更复杂的东西。你知道吗

有人知道如何用上面显示的方式重新索引数据帧吗?你知道吗

函数会被多次调用,因此速度优化也非常重要。你知道吗


Tags: columns数据nameidasv3nanv2
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:30

开始于:

Int64Index: 11 entries, 0 to 10
Data columns (total 6 columns):
I1    11 non-null float64
V1    11 non-null float64
I2    11 non-null float64
V2    11 non-null float64
I3    11 non-null float64
V3    11 non-null float64
dtypes: float64(6)

尝试:

pd.concat([df.loc[:, ['V{}'.format(i), 'I{}'.format(i)]].rename(columns={'I{}'.format(i): 'I'}) for i in range(1, 4)])

要获得:

            I        V1        V2        V3
0   13.823560  0.000000       NaN       NaN
1   13.823376  0.001274       NaN       NaN
2   13.823193  0.002547       NaN       NaN
3   13.823009  0.003821       NaN       NaN
4   13.822826  0.005095       NaN       NaN
5   13.822642  0.006368       NaN       NaN
6    0.613282  0.630456       NaN       NaN
7    0.455202  0.631730       NaN       NaN
8    0.296663  0.633004       NaN       NaN
9    0.137670  0.634277       NaN       NaN
10  -0.021770  0.635551       NaN       NaN
0   13.639405       NaN  0.000000       NaN
1   13.639224       NaN  0.001273       NaN
2   13.639043       NaN  0.002546       NaN
3   13.638862       NaN  0.003819       NaN
4   13.638681       NaN  0.005092       NaN
5   13.638500       NaN  0.006365       NaN
6    0.610912       NaN  0.630109       NaN
7    0.453456       NaN  0.631381       NaN
8    0.295533       NaN  0.632654       NaN
9    0.137149       NaN  0.633927       NaN
10  -0.021688       NaN  0.635200       NaN
0   13.455246       NaN       NaN  0.000000
1   13.455068       NaN       NaN  0.001272
2   13.454889       NaN       NaN  0.002544
3   13.454711       NaN       NaN  0.003817
4   13.454532       NaN       NaN  0.005089
5   13.454354       NaN       NaN  0.006361
6    0.608497       NaN       NaN  0.629756
7    0.451677       NaN       NaN  0.631028
8    0.294383       NaN       NaN  0.632301
9    0.136619       NaN       NaN  0.633573
10  -0.021605       NaN       NaN  0.634845

相关问题 更多 >

    热门问题