根据某个值拆分 Pandas 数据框列

5

我搜索了一下,没有找到和我的问题类似的。如果有的话,而我又找不到,请告诉我。这样我就可以删除这篇文章。

我遇到了一个问题,需要将 pandas dataframe 按值分成不同的数据帧(df)。

我有一个包含在文本文件中的数据集,并将它们存储为只有一列的 pandas dataframe。数据集内有多个信息集合,某个特定的值定义了该集合的结束,您可以在下面看到一个示例:

示例输入

In [8]: df
Out[8]: 
  var1
0    a
1    b
2    c
3    d
4    endValue
5    h
6    f
7    b
8    w
9    endValue

所以我想将这个数据框分成不同的数据框。我无法找到一种方法来做到这一点,但我相信一定有一种简单的方法。我在示例输出中显示的格式可能是错误的格式。所以,如果您有更好的想法,我很乐意看到。谢谢您的帮助。

我想要的示例输出

  var1
{[0    a
1    b
2    c
3    d
4    endValue]},
{[0    h
1    f
2    b
3    w
4    endValue]}


我有一个文本文件中的数据集,我将它们存储为只有一列的pandas dataframe。是否可能更改数据解析方式以获取正确的格式?你能分享一些数据吗? - AMC
我在我的问题中分享了样本输入数据和期望的输出数据,实际上,我找到了一个很好的解决方法。下面是具体内容。谢谢。 - aysebilgegunduz
2个回答

3

有一个用唯一索引值的想法是将不匹配的值替换为NaN,然后进行向后填充,最后循环遍历 groupby 对象,该对象针对一系列 DataFrame 进行操作:

g = df.index.to_series().where(df['var1'].eq('endValue')).bfill()
dfs = [a for i, a in df.groupby(g, sort=False)]
print (dfs)
[       var1
0         a
1         b
2         c
3         d
4  endValue,        var1
5         h
6         f
7         b
8         w
9  endValue]

3
您可以检查变量var1是否为endValue,使用cumsum作为自定义分组器,然后进行Groupby操作,并从结果中构建字典。
d = dict(tuple(df.groupby(df.var1.eq('endValue').cumsum().shift(fill_value=0.))))

或者对于一系列数据框(实际上以相同方式索引):

l = [v for _,v in df.groupby(df.var1.eq('endValue').cumsum().shift(fill_value=0.))]

print(l[0])

       var1
0         a
1         b
2         c
3         d
4  endValue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接