首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据在另一列中的分组,将csv文件/ pandas数据帧拆分为多个文件

根据在另一列中的分组,将csv文件/ pandas数据帧拆分为多个文件
EN

Stack Overflow用户
提问于 2020-12-22 14:18:38
回答 2查看 45关注 0票数 1

我在一个名为list.csv的csv文件中有以下数据集,该文件有2列68行,

代码语言:javascript
复制
name   group
295h1  groupA
20jca  groupA
....
2919d  groupG
....
2xx9a  groupM

每组有3-5个名字。

我想将这些名称分成不同的组,并将文件保存到csv文件中,如下所示。

group-1.csv

代码语言:javascript
复制
295h1
20jca
..

group-13.csv

代码语言:javascript
复制
...
2xx9a

到目前为止,我有以下代码,

代码语言:javascript
复制
import pandas as pd

counter = 1
tlist = []
for idx,row in df.iterrows():
    previousGroup = None
    if row['group'] == previousGroup:
        tlist.append(row['name'])
        previousGroup = row['group']
    else:
        with open(f'group-{counter}'), 'w',) as myfile:
             wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
             wr.writerow(tlist)
        counter += 1
        tlist = []

但是它创建了68个空文件,这是csv文件的长度。

如何根据我的需求正确拆分此文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-22 14:24:32

如果需要,请使用以1开头的数字作为组的名称groupA

代码语言:javascript
复制
for i, (_, group) in enumerate(df.groupby('group'), 1):
    group['name'].to_csv(f'group-{i}.csv', index=False)

EDIT: For first value in file是一种创建MultiIndex的想法,如下所示:

代码语言:javascript
复制
for i, (n, group) in enumerate(df.groupby('group'), 1):
    g = group[['name']]
    g.columns = [[n], g.columns]
    #print (g)
    g.to_csv(f'group-{i}.csv', index=False)
票数 1
EN

Stack Overflow用户

发布于 2020-12-22 14:23:56

您应该使用pandas groupby和pd.to_csv()

代码语言:javascript
复制
grouped = df.groupby('group')
for num, g in grouped:
    name = 'group' + '.csv'
    g.to_csv(name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65404054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档