我有一个数据框,如下所示:
POSITION Code_Count
S1 {"[471E;1]"}
S2 {"[471E;1]"}
S3 {"[471E;1]"}
S4 {"[471E;1]"}
S5 {"[471E;1]"}
S6 {"[5812;1]"}
S7 {"[471E;1]"}
S8 {"[471E;1]"}
T1 {"[7A2A;1]"}
T2 {"[471E;1]"}
T3 {"[7C95;1]"}
T4 {"[471E;1]"}
T5 {"[471E;1]"}
T6 {"[471E;1]"}
T7 {"[471E;1]"}
T8 {"[471E;1]"}
在Code_Count列中,第一个字符串是代码,数字是计数。此外,这些代码分为A到D 4个类别。下面列出了所有存在的代码列表:这些代码分为4个类别,即A到D,如下所示:
类别A包含以下代码:7749 7783 7784 7786 7A14 7AC5 7C88 7C92 7C93 7C95 C749 C783 C784 C786 CA14 CAC5 CC88 CC92 CC93 CC95 442A 49C2
类别B具有以下代码:1D 32 430B 4415 448E 4490 4492 457A 457B 496C 4970 778A 7A09 7A2A 7A2C 7C7C 7C80 C78A CA09 CA2A CA2C
类别C具有以下代码:7A7F 7A80 7C7E CA7F CA80 CAC8 7AC8 C77E 445A 496E 471E 49E
类别D:7AF0 7AF1 7AF2 7AF3 CAF0 CAF1 CAF2 CAF3 4616 4617 4618 5812
我希望我的最终数据框通过根据它们所属的类别对它们进行分类,从而根据初始数据框中存在的代码将代码计数包含到相应位置。例如,根据上述数据帧的输出数据帧应为:
POSITION Category A Category B Category C Category D
S1 0 0 1 0
S2 0 0 1 0
S3 0 0 1 0
S4 0 0 1 0
S5 0 0 1 0
S6 0 0 0 1
S7 0 0 1 0
S8 0 0 1 0
T1 0 1 0 0
T2 0 0 1 0
T3 1 0 0 0
T4 0 0 1 0
T5 0 0 1 0
T6 0 0 1 0
T7 0 0 1 0
T8 0 0 1 0
我尝试使用str.contains方法,但没有成功。任何帮助将非常感激。在此先多谢!
我想你可以通过提取值strip
和split
第一,然后添加Count
通过ix
与形成的遮掩isin
。最后drop
不需要的列和:fillna
0
catA = ['7749','7783','7784','7786','7A14','7AC5','7C88','7C92','7C93','7C95','C749','C783','C784','C786','CA14','CAC5','CC88','CC92','CC93','CC95','442A','49C2']
catB = ['1D','32','430B','4415','448E','4490','4492','457A','457B','496C','4970','778A','7A09','7A2A','7A2C','7C7C','7C80','C78A','CA09','CA2A','CA2C']
catC = ['7A7F','7A80','7C7E','CA7F','CA80','CAC8 7AC8 C77E','445A','496E','471E','49CA']
catD = ['7AF0','7AF1','7AF2','7AF3','CAF0','CAF1','CAF2','CAF3','4616','4617','4618','5812']
df[['Code','Count']] = df.Code_Count.str.strip('{["]}').str.split(';', expand=True)
df['Category A'] = df.ix[df.Code.isin(catA), 'Count']
df['Category B'] = df.ix[df.Code.isin(catB), 'Count']
df['Category C'] = df.ix[df.Code.isin(catC), 'Count']
df['Category D'] = df.ix[df.Code.isin(catD), 'Count']
df.drop(['Code_Count', 'Code', 'Count'], axis=1, inplace=True)
df[['Category A','Category B','Category C','Category D']] =
df[['Category A','Category B','Category C','Category D']].fillna(0)
print (df)
POSITION Category A Category B Category C Category D
0 S1 0 0 1 0
1 S2 0 0 1 0
2 S3 0 0 1 0
3 S4 0 0 1 0
4 S5 0 0 1 0
5 S6 0 0 0 1
6 S7 0 0 1 0
7 S8 0 0 1 0
8 T1 0 1 0 0
9 T2 0 0 1 0
10 T3 1 0 0 0
11 T4 0 0 1 0
12 T5 0 0 1 0
13 T6 0 0 1 0
14 T7 0 0 1 0
15 T8 0 0 1 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句