当列中的值匹配时将数据帧拆分为较小的数据帧并将它们导出到 excel fromat (pandas)

Splitting dataframe in smaller dataframe when value in column match and export them to excel fromat (pandas)

我有一个数据框 A。我需要将它分成具有匹配街道名称的较小数据框。

这是我的数据框:

id Location_name Street_Number Street_name Object_needed
1 麦当劳 4 奥朗德街 C400/P200
2 奥朗德 175 奥朗德街 Porte socle simple S20
3 体育场 197 波捷街 CCPI S20 6980138
4 国王朱埃 33 波捷街 Coffret CCPI CIBE 单声道
5 加勒比清洁 6 加利斯贝 Coffret CCPI CIBE 单声道

我想要的结果:

数据帧 1:

id Location_name Street_Number Street_name Object_needed
1 麦当劳 4 奥朗德街 C400/P200
2 奥朗德 175 奥朗德街 Porte socle simple S20

数据框 2:

id Location_name Street_Number Street_name Object_needed
3 体育场 197 波捷街 CCPI S20 6980138
4 国王朱埃 33 波捷街 Coffret CCPI CIBE 单声道

数据帧 3:

id Location_name Street_Number Street_name Object_needed
5 加勒比清洁 6 加利斯贝 Coffret CCPI CIBE 单声道

目标是创建与相应街道名称一样多的数据框。

我正在使用 groupby:

grouper = [g[1] for g in df.groupby(['Street_name'])]

有没有办法用 street_name 他们正在上课的名字来命名他们?在我的示例中,第一个不是名称 grouper[0],而是 Rue_de_Hollande

最后,您知道一次将所有数据帧导出为 excel 格式吗?

如果您希望街道在单独的 excel 个文件中,您可以使用 Pandas ExcelWriter:

streets = set(df.Street_name)
with pd.ExcelWriter('all_streets_excel.xlsx', mode='w') as writer:
    for street_name in streets:
        street_df = df[df.loc[:, 'Street_name'] == street_name]
        street_df.to_excel(writer, street_name)

这可以通过 pandas.query 和 pandas.to_excel 方法通过创建唯一街道名称列表并在 for 循环中迭代来实现:

streets = df["Street_name"].unique()

for street in streets:
    df_streets = df.query('Street_name == @street')
    df_streets.to_excel(street + '.xlsx')