2 回答
TA贡献2080条经验 获得超4个赞
DataFrame运行应用功能后,您可以调整列的顺序。例如:
df = df.apply(func, axis = 1)
df = df[['my_customers', 'email', 'other_column', 'new_column']]
为了减少重复的数量(即必须重新输入所有列名),您可以在调用 apply 函数之前获取现有的列集:
columns = list(df.columns)
df = df.apply(func, axis = 1)
df = df[columns + ['new_column']]
根据作者对原始问题的编辑进行更新。虽然我不确定选择的数据结构(将 API 结果存储在数据框中)是否是最佳选择,但一种简单的解决方案可能是在调用应用函数后提取新列。
# Store the existing columns before calling apply
existing_columns = list(df.columns)
df = df.apply(func, axis = 1)
all_columns = list(df.columns)
new_columns = [column for column in all_columns if column not in existing_columns]
df = df[columns + new_columns]
对于性能优化,您可以将现有列存储在 aset而不是 alist中,由于 Python 中集合数据结构的散列性质,这将在恒定时间内产生查找。这将更existing_columns = list(df.columns)改为existing_columns = set(df.columns).
最后,正如@Parfait 在他们的评论中非常友好地指出的那样,上面的代码可能会引发一些折旧警告。使用pandas.DataFrame.reindex而不是df = df[columns + new_columns]将使警告消失:
new_columns_order = [columns + new_columns]
df = df.reindex(columns=new_columns_order)
TA贡献1898条经验 获得超8个赞
发生这种情况是因为您没有为新列分配值 if row["other_column"] != 'yes'。试试这个:
def func(row):
if row['other_column'] == 'yes':
row['new_column'] = 'Hello'
return row
else:
row['new_column'] = ''
return row
df.apply(func, axis = 1)
您可以选择row["new_column"] == 'no'任何值。我只是把它留空。
添加回答
举报