python - 通过操作现有列创建新列
问题描述
我在数据框中有很多列,我想通过操作同一数据框中的其他两列来填充一列
col1 | col2 | col3 | col4
nan 1 2 4
2 2 2 3
3 nan 1 2
如果 nan 基于 col1 , col2 和 col3 值存在,我想要 col1 , col2 和 col3 的填充值。
我的代码如下:
indices_of_nan_cell = [(index,col1,col2,col3) for index,(col1,col2,col3) in enumerate(zip(col1,col2,col3)) if str(col1)=='nan' or str(col2)=='nan' or str(col3)=='nan']
for nan_values in indices:
if np.isnan(nan_values[1]) or nan_values[1] == 'nan':
read4['col1'][nan_values[0]]=float(nan_values[2])*float(nan_values[3])
if np.isnan(nan_values[2]) or nan_values[2] == 'nan':
read4['col2'][nan_values[0]]=float(nan_values[1])/float(nan_values[3])
if np.isnan(nan_values[3]) or nan_values[3] == 'nan':
read4['col3'][nan_values[0]]=float(nan_values[1])*float(nan_values[2])
它对我来说工作得很好,但是由于我的数据框中有数千行,所以要花很多时间,有没有有效的方法,我们可以做到这一点?
解决方案
我相信在除法和乘法中只需要fillna
替换s 和替换s的参数:NaN
mul
div
fill_value
NaN
df['col1'] = df['col1'].fillna(df['col2'].mul(df['col3'], fill_value=1))
df['col2'] = df['col2'].fillna(df['col1'].div(df['col3'], fill_value=1))
df['col3'] = df['col3'].fillna(df['col1'].mul(df['col2'], fill_value=1))
print (df)
col1 col2 col3 col4
0 2.0 1.0 2 4
1 2.0 2.0 2 3
2 3.0 3.0 1 2
另一种方法是仅使用NaN
s 行:
m1 = df['col1'].isna()
m2 = df['col2'].isna()
m3 = df['col3'].isna()
#oldier versions of pandas
#m1 = df['col1'].isnull()
#m2 = df['col2'].isnull()
#m3 = df['col3'].isnull()
df.loc[m1, 'col1'] = df.loc[m1, 'col2'].mul(df.loc[m1, 'col3'], fill_value=1)
df.loc[m2, 'col2'] = df.loc[m2, 'col1'].div(df.loc[m2, 'col3'], fill_value=1)
df.loc[m3, 'col3'] = df.loc[m3, 'col1'].mul(df.loc[m3, 'col2'], fill_value=1)
说明:
isna
使用3 个单独的布尔掩码过滤每一列。- 对于每个掩码,首先过滤行喜欢
df.loc[m1, 'col2']
和倍或除 - 最后分配回 - 仅替换
NaN
s 因为再次过滤df.loc[m1, 'col1']
推荐阅读
- python - 如何实现误报率作为 TF 指标
- android - 使用导航组件bottomnavmenu在android工具栏中自定义后退图标
- java - 放大 appsync-datastore Android Studio 上的 java.lang.NoClassDefFoundError
- javascript - 所需的反应输入对我不起作用我必须做什么?
- android - 导航抽屉上未显示汉堡包图标
- plotly - Plotly.js v2.0.0 默认悬停模式
- typescript - 当使用 WebdriverIO 、 Jasmine 、 TypeScript 的异步模式时, except().toBePresent 不起作用
- pandas - 转义具有双引号的json字符串
- python - 如何在 Pandas 中将 'Month(String) YYYY' 转换为 'YYYY-MM-DD'?
- java - Webview后退按钮问题(堆叠多次点击)