如何根据条件将值分配给数据框的列?
问题描述:
我有一个数据帧,它看起来像以下:如何根据条件将值分配给数据框的列?
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列中的第一个字符串是一个代码,号码是计数。 此外,代码被分为4类A到D.所有类别中出现的代码列表如下: 代码被分为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
Cate血淋淋的C有这些代码:7A7F 7A80 7C7E CA7F CA80 CAC8 7AC8 C77E 445A 496E 471E 49CA
类别d:7AF0 7AF1 7AF2 7AF3 CAF0 CAF1氟化钙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
首先提取值,然后通过ix
与isin
形成的遮掩添加Count
。最后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
为什么周围的值有花括号中'Code_Count'列?整个事情是一个字符串,也许就像这样:''{“[471E; 1]”}''? – Kartik
不是。这可能是从SQL查询中提取的,并且是格式或其他内容。 – Ruffy26