从应用于数据框每一行的函数创建新数据框的最佳选项是什么。 最终目标是连接(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/