python - 如何使用 iterrows() 创建新的数据框?

标签 python pandas dataframe

当我为每个客户创建新的数据框架时,我还想创建一个将所有这些数据框架附加在一起的巨大数据框架。

我创建了一个函数来按照我需要的方式对用户数据进行分组。现在我想迭代另一个包含唯一用户 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.appendpd.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/

相关文章:

javascript - 如何使用 django 表单和模板更新图像输入

python - 在opencv中将png保存为jpg时出现问题

python - 将整行设置为值

python - 从 pandas 字典字典中制作数据帧字典

r - 根据 R 中具有两个条件的另一个表改变新列

python - Pandas DataFrame 逐行比较

python - 具有不同长度数组的 Pandas

python - 遍历字典列表并从列表中找到匹配的元素并将匹配键的值附加到 defaultdict

python - 将 QPixmap 转换为 Numpy

python - Pylab 用表格绘图