Pandas矢量化

2024-05-15 12:18:47 发布

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

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

   MSuite  TCase   KWord  
 0 MS1     Nan     Nan     
 1 NaN     T1      NaN     
 2 NaN     NaN     K1  
 3 NaN     NaN     K4 
 4 NaN     NaN     K8 
 5 NaN     NaN     V3
 6 NaN     T2      NaN 
 7 NaN     NaN     K7 
 8 NaN     NaN     K12 
 9 NaN     NaN     V10 
10 MS2     NaN     NaN 
11 NaN     T3      NaN 
12 NaN     NaN     K22
13 NaN     NaN     K15    
14 NaN     NaN     V3 
15 NaN     T4      NaN 
16 NaN     NaN     K10 
17 NaN     NaN     K4 
18 NaN     NaN     K12
19 NaN     NaN     K2
20 NaN     NaN     V6   

我想把它分成以下几部分:

矩阵1-K矩阵

[[1, 4, 8, 7, 12, 22, 15, 10, 4, 12, 2],  
 [1, 1, 1, 2,  2,  3,  3,  4, 4,  4, 4],
 [1, 1, 1, 1,  1,  2,  2,  2, 2,  2, 2]]

对于顶行

每个K#存储在一个单独的数据帧/数组中,我想按时间顺序获取每个K的索引

对于中间行

我想表示每个K存储在哪个TCase下,即T1由K1、K4、K8组成

底行

类似于中间行,但使用MSuite表示

矩阵2-V矩阵

 [[3, 10, 3, 6],
 [4,  3, 3, 5], 
 [1,  1, 2, 2]]

顶行

与矩阵1中的第一行类似,我有一个单独的文件,其中包含所有可用的V#的列表,我只想获取文件V#的索引,该索引与数据框中的索引相同

中间行

T#每组中V#的索引,即在T1中,V3是第四个KWord,而对于T2,V10是第三个KWord

底行

表示V#所属的M套件。 i、 T1中的e V3以及T2中的V10都属于MS1->;1而T3中的V3和T4中的V6都属于MS2->;2.

迄今为止的尝试

我开始在数据帧中循环,但遇到了这个word of advice. 所以现在我想知道我是否需要以某种方式实现矢量化,但我真的不知道从哪里开始

如果不是矢量化,我将继续在数据帧中循环,同时在每次MSuite和TCase增加时进行缓存,并附加缓存的值


Tags: 数据矩阵k1v3nant1v10t2
1条回答
网友
1楼 · 发布于 2024-05-15 12:18:47

您可以尝试使用string containstring extract来实现这一点

def Process(df,Char):
    df = df.loc[df.KWord.fillna('').str.contains(Char)]
    return df.apply(lambda x: x.str.extract('(\d+)')[0].rename(x.name)).astype(int).T.values[::-1]
df = pd.read_clipboard()
df[['MSuite','TCase']] = df[['MSuite','TCase']].ffill()
Process(df,'K')

输出:

array([[ 1,  4,  8,  7, 12, 22, 15, 10,  4, 12,  2],
       [ 1,  1,  1,  2,  2,  3,  3,  4,  4,  4,  4],
       [ 1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2]])

相关问题 更多 >