假设我们有一个这样的数据帧:
my_df>>
column_1 column_2 column_3 column_4
0 0.276162 0.552951 0.866023 0.571535
1 0.112933 0.549487 0.626958 0.988705
2 0.916932 0.561641 0.220696 0.545019我可以有一个函数,它可以获得任何像这样的数据帧,并将其中的任何一列作为输入吗?
更清楚地说,如果我有一个这样的函数:
def multiply_5(df,column):
df.column=df.column.apply(lambda x:x*5-3)如果我以类似的方式使用它,它可以工作吗?
multiply_5(my_df,column_2)为了实现这一点:
my_df.column_2=my_df.column_2.apply(lambda x:x*5-3)我知道我写的这种特定的方法不起作用,但是有没有什么简单的方法可以将这个函数用于其他数据帧?
发布于 2017-03-12 14:06:37
尝试:
def multiply_5(df,column):
df[column]=df[column].apply(lambda x:x*5-3)
return df
df = multiply_5(df, "column_2")
print(df)
column_1 column_2 column_3 column_4
0 0.276162 -4.176225 0.866023 0.571535
1 0.112933 -4.262825 0.626958 0.988705
2 0.916932 -3.958975 0.220696 0.545019甚至还有一种更奇怪的方式来通过属性来做同样的事情:
def multiply_5(df,column):
setattr(df,column, getattr(df,column).apply(lambda x:x*5-3))
return df 发布于 2017-03-12 16:52:45
实际上,你甚至不需要这样的函数--你可以使用DataFrame.eval()函数:
数据:
In [6]: df
Out[6]:
column_1 column_2 column_3 column_4
0 0.276162 0.552951 0.866023 0.571535
1 0.112933 0.549487 0.626958 0.988705
2 0.916932 0.561641 0.220696 0.545019演示:
In [7]: df.eval("column_1 = column_1 * 5", inplace=False)
Out[7]:
column_1 column_2 column_3 column_4
0 1.380810 0.552951 0.866023 0.571535
1 0.564665 0.549487 0.626958 0.988705
2 4.584660 0.561641 0.220696 0.545019
In [8]: df.eval("new = (column_1 + column_3) ** 2", inplace=False)
Out[8]:
column_1 column_2 column_3 column_4 new
0 0.276162 0.552951 0.866023 0.571535 1.304587
1 0.112933 0.549487 0.626958 0.988705 0.547439
2 0.916932 0.561641 0.220696 0.545019 1.294197
In [9]: df.eval("new = sqrt(sin(column_2))", inplace=False)
Out[9]:
column_1 column_2 column_3 column_4 new
0 0.276162 0.552951 0.866023 0.571535 0.724707
1 0.112933 0.549487 0.626958 0.988705 0.722669
2 0.916932 0.561641 0.220696 0.545019 0.729778https://stackoverflow.com/questions/42744241
复制相似问题