Python 将函数应用于所有列,并使用新名称添加新列
我确实有一个数据帧Python 将函数应用于所有列,并使用新名称添加新列,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,我确实有一个数据帧df,有几个列,如下所示: col1 col2 0 0.627521 0.026832 1 0.470450 0.319736 2 0.015760 0.484664 3 0.645810 0.733688 4 0.850554 0.506945 我想对这些列中的每一列应用一个函数,并将结果添加为附加列(类似于),其中名称是原始名称加上所有添加列的通用后缀 我尝试了以下(高度简化的案例): 这让我 col1
df
,有几个列,如下所示:
col1 col2
0 0.627521 0.026832
1 0.470450 0.319736
2 0.015760 0.484664
3 0.645810 0.733688
4 0.850554 0.506945
我想对这些列中的每一列应用一个函数,并将结果添加为附加列(类似于),其中名称是原始名称加上所有添加列的通用后缀
我尝试了以下(高度简化的案例):
这让我
col1 col2 col1 col2
0 0.627521 0.026832 0.627521 0.026832
1 0.470450 0.319736 1.470450 1.319736
2 0.015760 0.484664 2.015760 2.484664
3 0.645810 0.733688 3.645810 3.733688
4 0.850554 0.506945 4.850554 4.506945
计算是正确的,但列名是错误的
我期望的输出是
col1 col2 col1_change col2_change
0 0.627521 0.026832 0.627521 0.026832
1 0.470450 0.319736 1.470450 1.319736
2 0.015760 0.484664 2.015760 2.484664
3 0.645810 0.733688 3.645810 3.733688
4 0.850554 0.506945 4.850554 4.506945
如果我这么做的话
do_and_rename(df['col1'], df.index)
我明白了
用正确的名字。如何使用这些返回的名称作为列标题?对于我来说:
new_df = pd.concat([df] + [do_and_rename(df[x], df.index) for x in df], axis=1)
print (new_df)
col1 col2 col1_change col2_change
0 0.364028 0.694481 0.364028 0.694481
1 0.457195 0.813740 1.457195 1.813740
2 0.286694 0.133999 2.286694 2.133999
3 0.130283 0.398216 3.130283 3.398216
4 0.694586 0.936815 4.694586 4.936815
对于我的工作:
new_df = pd.concat([df] + [do_and_rename(df[x], df.index) for x in df], axis=1)
print (new_df)
col1 col2 col1_change col2_change
0 0.364028 0.694481 0.364028 0.694481
1 0.457195 0.813740 1.457195 1.813740
2 0.286694 0.133999 2.286694 2.133999
3 0.130283 0.398216 3.130283 3.398216
4 0.694586 0.936815 4.694586 4.936815
如果不想创建新的数据帧,可以执行以下操作:
for col in df:
df[col + '_change'] = df[col] + df.index
如果不想创建新的数据帧,可以执行以下操作:
for col in df:
df[col + '_change'] = df[col] + df.index
您可以使用
df.join(您的函数(df,args…,)。添加后缀(“更改”))
pattern。其中,your_func
返回修改后的dataframe
In [1459]: def your_func(df, s):
...: dff = df.add(s, axis=0)
...: return dff
...:
In [1460]: df.join(your_func(df, df.index.values).add_suffix('_change'))
Out[1460]:
col1 col2 col1_change col2_change
0 0.627521 0.026832 0.627521 0.026832
1 0.470450 0.319736 1.470450 1.319736
2 0.015760 0.484664 2.015760 2.484664
3 0.645810 0.733688 3.645810 3.733688
4 0.850554 0.506945 4.850554 4.506945
In [1461]: df
Out[1461]:
col1 col2
0 0.627521 0.026832
1 0.470450 0.319736
2 0.015760 0.484664
3 0.645810 0.733688
4 0.850554 0.506945
您可以使用
df.join(您的函数(df,args…,)。添加后缀(“更改”))
pattern。其中,your_func
返回修改后的dataframe
In [1459]: def your_func(df, s):
...: dff = df.add(s, axis=0)
...: return dff
...:
In [1460]: df.join(your_func(df, df.index.values).add_suffix('_change'))
Out[1460]:
col1 col2 col1_change col2_change
0 0.627521 0.026832 0.627521 0.026832
1 0.470450 0.319736 1.470450 1.319736
2 0.015760 0.484664 2.015760 2.484664
3 0.645810 0.733688 3.645810 3.733688
4 0.850554 0.506945 4.850554 4.506945
In [1461]: df
Out[1461]:
col1 col2
0 0.627521 0.026832
1 0.470450 0.319736
2 0.015760 0.484664
3 0.645810 0.733688
4 0.850554 0.506945
@Zero:当然,添加了它。理想情况下,为什么不使用
df.join(df.add(df.index.values,axis=0)。添加后缀(“\u change”)
?@Zero:这总是问题所在,示例很少。在我的实际情况中,我不想仅仅做一个加法,而是应用一个更复杂的函数;如果它运行良好,我们会很乐意向上投票:)@Zero:当然,添加了它。理想情况下,为什么不使用df.join(df.add(df.index.values,axis=0)。添加后缀(“\u change”)
?@Zero:这总是一个问题,只有很少的例子。在我的实际情况中,我不想仅仅做一个加法,而是应用一个更复杂的函数;如果效果好的话,我会很乐意投票给你:)真的很好用concat真的很好用concat