为DF中的任何列定义函数

时间:2018-04-25 18:12:59

标签: python pandas function

在我的例子中,我想要删掉" 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

2 个答案:

答案 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)