在我的例子中,我想要删掉" C"和" D"在Column1中,对应于" Erase"在Column2中。我试图将这种可扩展性扩展到我可以替代Column1使用的任何未来列。
import pandas as pd
df = { 'Column1': ["A","B","C","D","E"],
'Column2': ["Keep","Keep","Erase","Erase","Keep"]}
df = pd.DataFrame(df, columns=['Column1','Column2'])
def func(any_column):
df[any_column][df['Column2'].isin(['Erase'])] = ""
return any_column
df['Column1'] = df['Column1'].map(func)
df
答案 0 :(得分:0)
通过DF的循环可以工作: 您可以在Future_columns变量中添加新列,也可以查找DF中的所有列。
import pandas as pd
df = { 'Column1': ["A","B","C","D","E"],
'Column2': ["Keep","Keep","Erase","Erase","Keep"],
'Column3': ["A","C","D","F","E"] #Added DF
}
df = pd.DataFrame(df, columns=['Column1','Column2','Column3'])
利用numpy创建一个"如果变量等于x,则输出Y else Z
import numpy as np
Future_columns=['Column1','Column3']
for x in range(len(Future_columns)):
df['%s' %(Future_columns[x])]=np.where(df.Column2=="Erase","",df['%s' %(Future_columns[x])])
df.head()
或者自动化这段代码,排除' Column1'使用列标题列表:
import numpy as np
all_columns=list(df)
all_columns.remove('Column2')
future_columns=all_columns
for x in range(len(Future_columns)):
df['%s' %(Future_columns[x])]=np.where(df.Column2=="Erase","",df['%s' %(Future_columns[x])])
df.head()
答案 1 :(得分:0)
试
df.Column1 = df.Column1.where(df.Column2 != 'Erase', None)