Python 熊猫数据帧。基于其他列的非空值添加多个列
我的dataframe示例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
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