python - .apply() 函数到数据帧并返回新数据帧?

标签 python pandas apply

从应用于数据框每一行的函数创建新数据框的最佳选项是什么。 最终目标是连接(rbind)所有生成的 new_dataframes。

输入:

   Name  Age
0   tom   10
1  nick   15
2  juli   14

示例:

import pandas as pd
import pdb

data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

def foo(row):
 #pdb.set_trace()
 new_df = row.to_frame(name='Values')
 new_df.loc[new_df.index=='Name','New_column'] = 'Surname'
 new_df.loc[new_df.index=='Age','New_column'] = '+5 months'
 return new_df

df.apply(foo, axis=1)

输出:

data = {'Values':['Tom', '10', 'nich', '15', 'juli', '14'], 
'New_column': ['Surname', '+5 months', 'Surname', '+5 months', 'Surname', 
'+5 months']}
output = pd.DataFrame(data)

 Values New_column
0    Tom    Surname
1     10  +5 months
2   nich    Surname
3     15  +5 months
4   juli    Surname
5     14  +5 months

如果 .apply() 不是最佳选择,我希望有替代方案。

对于 R 用户,我正在寻找 do.call(rbind, sapply())

谢谢。

最佳答案

从功能的一项改进开始:

def foo(row):
    new_df = row.to_frame(name='Values')
    new_df.loc['Name', 'New_column'] = 'Surname'
    new_df.loc['Age', 'New_column'] = '+5 months'
    return new_df

(不需要“new_df.index==”)。

要获取输出,请转换 DataFrame 的系列(由应用产生) 放入(DataFrames)普通列表并将它们连接起来。

执行此操作的代码是:

pd.concat(df.apply(foo, axis=1).tolist())

关于python - .apply() 函数到数据帧并返回新数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58657667/

相关文章:

python - 如何自定义WTForm model_form 字段映射?

r - 如何在data.table中动态使用lapply?

r - 根据其他列中值的大小创建新变量

Python Matplotlib – 在 x 轴上代表采样位置的条形图

python - 在python中转置数据

python - 使用 sklearn StandardScaler 缩放的数据平均值不为零

r - 在 R 中跨列应用用户定义的函数

python - 如何将重复的数据行排成一行

python - 使用 turtle 图形的谢尔宾斯基三角形递归

python - zlib:解压缩数据时出现错误 -3:距离太远无效