我有一个DF,如下所示:
DF =
id Result
1 Li_In-AR-B
1 Li_In-AR-L
3 N
4 Lo_In-AR-U
5 Li_In-AR-U
6 Or_Ba-AR-B
6 Or_Ba-AR-L
7 N
现在,我想为第一个“-”之前的Result
中的每个唯一值创建新列。新列中的所有其他值都应设置为N
。
DF =
id Result Li_In Lo_In Or_Ba
1 Li_In-AR-B Li_In-AR-B N N
1 Li_In-AR-L Li_In-AR-L N N
3 N N N N
4 Lo_In-AR-U N Lo_In-AR-U N
5 Li_In-AR-U Li_In-AR-U N N
6 Or_Ba-AR-B N N Or_Ba-AR-B
6 Or_Ba-AR-L N N Or_Ba-AR-L
7 N N N N
我认为我可以使用.get_dummies
轻松地做到这一点,但这只会在每个单元格中返回一个二进制值。
DF_dummy = DF.Result.str.get_dummies(sep='-')
DF = pd.concat([DF,DF_dummy ],axis=1)
任何想法
答案 0 :(得分:2)
通过split
创建布尔值DataFrame
,删除列N
并通过1
进行比较。然后通过DataFrame.where
创建具有相同列(如mask和repalce值)的DataFrame
:
m = DF['Result'].str.split('-', n=1).str[0].str.get_dummies().drop('N', axis=1) == 1
df1 = pd.concat([DF['Result']] * len(m.columns), axis=1, keys=m.columns)
df = DF.join(df1.where(m.values, 'N'))
print (df)
id Result Li_In Lo_In Or_Ba
0 1 Li_In-AR-B Li_In-AR-B N N
1 1 Li_In-AR-L Li_In-AR-L N N
2 3 N N N N
3 4 Lo_In-AR-U N Lo_In-AR-U N
4 5 Li_In-AR-U Li_In-AR-U N N
5 6 Or_Ba-AR-B N N Or_Ba-AR-B
6 6 Or_Ba-AR-L N N Or_Ba-AR-L
7 7 N N N N