Python 基于重复值将数据帧拆分为多个csv文件

Python 基于重复值将数据帧拆分为多个csv文件,python,pandas,csv,dataframe,split,Python,Pandas,Csv,Dataframe,Split,我有一个包含多个列的数据集,但只关注一个名为“VAL”的列。此列中的每个值的范围从0到4,因此我希望根据这些重复值将其拆分为5个单独的数据帧,然后将每个数据帧导出到单独的csv文件中 我已经能够使用pandas对数字进行排序,但现在我需要将值划分为更小的数据集,记住我有多个文件,我想这样做,以便可能有一个for循环 这是我目前的输出 这就是我希望它看起来的样子 下面是一个示例,其中C列类似于VAL列: from io import StringIO import pandas as pd d

我有一个包含多个列的数据集,但只关注一个名为“VAL”的列。此列中的每个值的范围从0到4,因此我希望根据这些重复值将其拆分为5个单独的数据帧,然后将每个数据帧导出到单独的csv文件中

我已经能够使用pandas对数字进行排序,但现在我需要将值划分为更小的数据集,记住我有多个文件,我想这样做,以便可能有一个for循环

这是我目前的输出

这就是我希望它看起来的样子


下面是一个示例,其中C列类似于VAL列:

from io import StringIO

import pandas as pd

data = """
A,B,C
5d8b,N,1
5d8b,A,1
5d8b,B,2
5d8b,C,2
5d8b,Y,3
5d8b,X,3
"""

df = pd.read_csv(StringIO(data), sep=',')

for key, group in df.groupby('C'):
    group.to_csv(f'df_{key}.csv', index=False)

更改文件以匹配预期输出

df = pd.read_clipboard(sep'\s+')
然后按VAL分组并编写您的csv

for group,data in df.groupby('VAL'):
    data.to_csv(f"val_{group}.csv",index=False)
这将从您的数据中为我写入两个csv


这回答了你的问题吗?循环中的f字符串不是多余的吗?难道不是
y.to_csv(f'val_{x}.csv',index=False)
做这个把戏,而不是创建一个新的列等吗?我不确定有什么灵活性可以获得?在任何情况下,
.tolist()
.unique()
不是没有必要吗?而且,即使OP确实需要整个数据帧来生成文件名,当我们最终只需要每个组一个文件名时,创建整个列又有什么意义呢?我刚刚意识到,
unique()
和索引与我的第二条评论直接相关,因此我的第一条评论本身没有多大意义。LOL我认为可以安全地假设文件列只是为了解决这个问题而创建的,不是吗?我很难想象这样的情况是最好的解决办法。至于f字符串,我指的是在循环中,我相信
file\u name
已经是一个字符串。即使它不是字符串,一个简单的
str()
调用也应该足够了。
df = pd.read_clipboard(sep'\s+')
for group,data in df.groupby('VAL'):
    data.to_csv(f"val_{group}.csv",index=False)
for group,data in df.groupby('VAL'):
    print(data)
          A    B    C    D    E     F     G VAL       FILE
0   954  380  158  166  431   201   769   0  val_0.csv
1  1142  348  203  962    0   878  1023   0  val_0.csv
2  1688  279  229    0  488  1007     0   0  val_0.csv
3  4792  371  420   29  372     0   745   0  val_0.csv
4  2106  352   76  196  388     0   695   0  val_0.csv
       A    B    C    D     E    F    G VAL       FILE
6   5634  441  283  277   788   45  585   4  val_4.csv
7    827  672  606   24  1023  463  742   4  val_4.csv
8   6703  324  203    0   623  214  726   4  val_4.csv
9   9056  604  398    0   981    0  633   4  val_4.csv
10     0  574  338  144   942  608  793   4  val_4.csv