给出一个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语句,但我想知道是否有更好的方法可以更有效地执行此操作,因为还有许多其他列。
谢谢!
答案 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
旁边的冒号表示"将此列及其所有内容放在右侧。"