Python 熊猫矢量化
我有一个熊猫数据框,如下所示:Python 熊猫矢量化,python,pandas,dataframe,vectorization,Python,Pandas,Dataframe,Vectorization,我有一个熊猫数据框,如下所示: 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 N
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矩阵
第一排
每个K#存储在一个单独的数据帧/数组中,我想按时间顺序获取每个K的索引
中间一排
我想表示每个K存储在哪个TCase下,即T1由K1、K4、K8组成
底层
类似于中间行,但使用MSuite表示
矩阵2-V矩阵
第一排
与矩阵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
迄今为止的尝试
我开始循环遍历数据帧,但遇到了这个问题
所以现在我想知道我是否需要以某种方式实现矢量化,但我真的不知道从哪里开始
如果不是矢量化,我将继续在数据帧中循环,同时在每次MSuite和TCase增加时进行缓存,并附加缓存的值 您可以尝试使用with来实现这一点
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')
输出:
看起来很漂亮。我对process函数的第一行有点迷茫,您在哪里找到提取方法的模式?谢谢你的回答,因为它看起来是正确的,但是如果你能对代码稍加评论,让我知道你到底在做什么,那就太棒了。谢谢。哦,等等,不,是你编辑的。。忽略注释^^谢谢。非常好+1,我有一个类似的方法,唯一的更改是:
df=df[df.KWord.str.contains(Char,na=False)]:return df.stack().str.extract('(\d+),expand=False)。astype(int)。unstack().to_numpy().T[:-1]
:)谢谢@anky\u 91,几乎类似的方法:)我喜欢这个想法,但我想指出的是,K1和K2并不是简单地删除字母,然后保留数字。它们对应于我想提及的不同数据框中的项目,即有一个包含所有K的数据框,然后我想从该数据框中获取索引,并在最终矩阵中使用该值。
[[3, 10, 3, 6],
[4, 3, 3, 5],
[1, 1, 2, 2]]
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]])