当我为每个客户创建新的数据框架时,我还想创建一个将所有这些数据框架附加在一起的巨大数据框架。
我创建了一个函数来按照我需要的方式对用户数据进行分组。现在我想迭代另一个包含唯一用户 key 的数据帧,并使用这些用户 key 为每个用户创建数据帧。然后我想将所有这些数据帧聚合成一个巨大的数据帧。
for index, row in unique_users.iterrows():
customer = user_df(int(index))
print(customer)
此函数按预期工作,并为每个客户打印 df
for index, row in unique_users.iterrows():
top_users = pd.DataFrame()
customer = user_df(int(index))
top_users = top_users.append(customer)
print(top_users)
这仅打印出最后一个客户的 df
我希望当它迭代并创建一个新的客户 df 时,它会将其附加到 top_user df 中,所以最后我有一个巨大的 top_user df。但它只包含最后一个客户的 df。
最佳答案
如advised作者:@unutbu:永远不要在 for 循环内调用 DataFrame.append
或 pd.concat
。它会导致二次复制。相反,构建一个数据帧列表以在循环外调用pd.concat
一次。
实际上,您可以使用列表/字典理解来处理数据框构建,而无需 iterrows
而是直接使用索引值。使用任一推导式,您都可以避免初始化容器并为其迭代分配的记录。
# LIST COMPREHENSION APPROACH
df_list = [user_df(int(idx)) for idx in unique_users.index.values]
top_users = pd.concat(df_list, ignore_index=True)
# DICTIONARY COMPREHENSION APPROACH
df_dict = {idx: user_df(int(idx)) for idx in unique_users.index.values}
top_users = pd.concat(df_dict, ignore_index=True)
关于python - 如何使用 iterrows() 创建新的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351170/