python – 从带有补充列的numpy数组初始化DataFrame

假设我有以下代码:

import pandas as pd
import numpy as np
A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))
import pandas as pd
df = pd.DataFrame({'Color':np.repeat(A,2),'Trial':np.tile(B,2),'V0':C[:,0,0],'V1':C[:,0,1],
                  'V2':C[:,1,0], 'V3':C[:,1,1]})
df

其中输出以下数据帧

>   Color Trial    V0          V1         V2          V3
> 0 red     0   0.726781    0.549726    0.053999    0.469885
> 1 red     1   0.609131    0.012120    0.587780    0.344290
> 2 blue    0   0.285235    0.491907    0.907871    0.549792
> 3 blue    1   0.646334    0.164288    0.029917    0.181290

如果数组的大小增长,我想避免输入numpy数组的每个条目,所以我想出了更大数组的以下解决方案

A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))
import pandas as pd
df = pd.DataFrame({'Color':np.repeat(A,2),'Trial':np.tile(B,2)})
_df = pd.DataFrame(C.reshape(4,4)).add_prefix('V')
df = pd.concat([df,_df],axis=1)
df

哪个输出相同.我的问题是,是否有更好的方法来实现这一点,不涉及为我想要包含的每个数组创建一个数据帧,然后连接它们?

最佳答案 Naw,好像你已经覆盖了你的基地….虽然这里有一些清理,使用DataFrame.assign-

pd.DataFrame(C.reshape(4,4)).add_prefix('V')).assign(
    Color=A * len(A), Trial=np.tile(B, len(A))
)

         V0        V1        V2        V3 Color  Trial
0  0.625676  0.201339  0.873423  0.227824   red      0
1  0.202515  0.515637  0.344809  0.958107  blue      1
2  0.040853  0.682505  0.679995  0.104927   red      0
3  0.548399  0.315772  0.081189  0.282158  blue      1
点赞