使用nan填充多个列,其中行包含

时间:2018-02-12 21:41:46

标签: pandas nan

给出一个df:

Name  Alias Value1  Value2  1  2  3...
ABC   a      1         2    3  4  5...
ABC   b      2         2    3  4  5...
ABC   ijk    3         2    3  4  5...
XYZ   a      5         5    1  2  3...
XYZ   ijk    6         4    5  6  7...

我想要应用的条件是:如果Alias == ijk然后保留列名称,别名,值1并用np.nan填充其余部分

Name  Alias Value1  Value2  1  2  3...
ABC   a      1         2    3  4  5...
ABC   b      2         2    3  4  5...
ABC   ijk    3         
XYZ   a      5         5    1  2  3...
XYZ   ijk    6         

我可以为列Values2和1,2,3做一个np.where语句,但我想知道是否有更好的方法可以更有效地执行此操作,因为还有许多其他列。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用.loc + isin

df.loc[df.Alias=='ijk',~df.columns.isin(['Name',  'Alias', 'Value1'])]=np.nan
df
Out[480]: 
  Name Alias  Value1  Value2    1    2    3
0  ABC     a       1     2.0  3.0  4.0  5.0
1  ABC     b       2     2.0  3.0  4.0  5.0
2  ABC   ijk       3     NaN  NaN  NaN  NaN
3  XYZ     a       5     5.0  1.0  2.0  3.0
4  XYZ   ijk       6     NaN  NaN  NaN  NaN

答案 1 :(得分:1)

您可以使用简单的基于标签的索引:

df.loc[df.Alias=='ijk', '1':] = np.nan

  Name Alias  Value1  Value2    1    2    3
0  ABC     a       1       2  3.0  4.0  5.0
1  ABC     b       2       2  3.0  4.0  5.0
2  ABC   ijk       3       2  NaN  NaN  NaN
3  XYZ     a       5       5  1.0  2.0  3.0
4  XYZ   ijk       6       4  NaN  NaN  NaN

我假设您的列是字符串。如果他们是整数,只需使用..., 1:]

1旁边的冒号表示"将此列及其所有内容放在右侧。"