我有一个Pandas DataFrame,如下所示:
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]
我想要做的是重塑DataFrame,使它看起来像这样:
#(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')
... DataFrame被挤压到两列,所以我想我需要一些比较棘手的东西。
任何人都知道如何以上面显示的方式重新索引DataFrame?
该函数将被调用很多次,因此速度优化也非常重要。
答案 0 :(得分:0)
从:
开始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