2024-04-20 07:25:37 发布
网友
创建下面提到的同一列的更好方法是什么:
col_new = [] for r1 in df['col_A']: if r1==1: for r2 in df['col_B']: if r2!='None': col_new.append('col_new') df['col_new'] = col_new
我的数据帧很大(120k*22),运行上面的代码就是挂在笔记本上。有没有一种更快更有效的方法来创建这个列,当col\u a为1时,它表示col\u B的所有非空值
我认为需要创建布尔掩码,然后通过^{}附加值:
mask = (df['col_A'] == 1) & (df['col_B']!='None') #if None is not string #mask = (df['col_A'] == 1) & (df['col_B'].notnull()) df.loc[mask, 'col_new'] = 'col_new'
样本:
列中是字符串None:
None
df = pd.DataFrame({ 'col_A': [1,1,2,1], 'col_B': ['a','None','None','a'] }) print (df) col_A col_B 0 1 a 1 1 None 2 2 None 3 1 a mask = (df['col_A'] == 1) & (df['col_B']!='None') df.loc[mask, 'col_new'] = 'val' print (df) col_A col_B col_new 0 1 a val 1 1 None NaN 2 2 None NaN 3 1 a val
列中有not strings ^{}s,然后使用^{}:
df = pd.DataFrame({ 'col_A': [1,1,2,1], 'col_B': ['a',None,None,'a'] }) print (df) col_A col_B 0 1 a 1 1 None 2 2 None 3 1 a mask = (df['col_A'] == 1) & (df['col_B'].notna()) #oldier pandas versions #mask = (df['col_A'] == 1) & (df['col_B'].notnull()) df.loc[mask, 'col_new'] = 'val' print (df) col_A col_B col_new 0 1 a val 1 1 None NaN 2 2 None NaN 3 1 a val
另外,如果想使用if-else语句^{}真的很有用:
if-else
df['col_new'] = np.where(mask, 'val', 'another_val') print (df) col_A col_B col_new 0 1 a val 1 1 None another_val 2 2 None another_val 3 1 a val
我认为需要创建布尔掩码,然后通过^{} 附加值:
样本:
列中是字符串
None
:列中有not strings ^{}s ,然后使用^{} :
另外,如果想使用} 真的很有用:
if-else
语句^{相关问题 更多 >
编程相关推荐