Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数应用于所有列,并使用新名称添加新列_Python_Pandas_Dataframe_Apply - Fatal编程技术网

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