Python 熊猫数据帧。基于其他列的非空值添加多个列

Python 熊猫数据帧。基于其他列的非空值添加多个列,python,pandas,dataframe,Python,Pandas,Dataframe,我的dataframe示例 np.random.seed(66) df = pd.DataFrame( np.random.rand(5, 3), columns=list('ABC'), index=['R{}'.format(i) for i in range(5)] ) df[df < .5] = None df.head() A B C R0 NaN NaN NaN R1 0.67 NaN NaN R2 0.75 0.5

我的dataframe示例

np.random.seed(66)
df = pd.DataFrame(
    np.random.rand(5, 3), 
    columns=list('ABC'), 
    index=['R{}'.format(i) for i in range(5)]
)
df[df < .5] = None
df.head()

    A    B    C
R0  NaN  NaN  NaN
R1  0.67 NaN  NaN
R2  0.75 0.55 0.51
R3  NaN  NaN  0.82
R4  NaN  NaN  0.67
当我尝试对多个列执行相同操作时,所有内容都会中断

df['A_percent', 'B_percent'] = (df.loc[df['A', 'B'].notnull(),['A', 'B']] * 100).astype(np.int32)
可以一步完成吗?

您可以使用,然后应移除布尔掩码:

df[['A_percent', 'B_percent']] = np.floor(df[['A', 'B']] * 100)
print (df)
           A         B         C  A_percent  B_percent
R0       NaN       NaN       NaN        NaN        NaN
R1  0.679109       NaN       NaN       67.0        NaN
R2  0.758416  0.557619  0.514803       75.0       55.0
R3       NaN       NaN  0.829095        NaN        NaN
R4       NaN       NaN  0.678006        NaN        NaN
您的解决方案应该通过将缺少的值替换为一些数字来更改,例如
0
,以便可以转换为
整数
,并用于新列:

df[['A_percent', 'B_percent']] = np.floor(df[['A', 'B']] * 100)
print (df)
           A         B         C  A_percent  B_percent
R0       NaN       NaN       NaN        NaN        NaN
R1  0.679109       NaN       NaN       67.0        NaN
R2  0.758416  0.557619  0.514803       75.0       55.0
R3       NaN       NaN  0.829095        NaN        NaN
R4       NaN       NaN  0.678006        NaN        NaN
mask = df[['A','B']].notnull()
df1 = (df[['A','B']].fillna(0)*100).astype(np.int32)

df[['A_percent', 'B_percent']] = df1.where(mask)
print (df)
           A         B         C  A_percent  B_percent
R0       NaN       NaN       NaN        NaN        NaN
R1  0.679109       NaN       NaN       67.0        NaN
R2  0.758416  0.557619  0.514803       75.0       55.0
R3       NaN       NaN  0.829095        NaN        NaN
R4       NaN       NaN  0.678006        NaN        NaN