根据值拆分熊猫数据框列

时间:2020-04-27 07:49:04

标签: python pandas numpy

我进行了搜索,但找不到像我这样的问题。所以,如果有某种原因,我找不到,请告诉我。所以我可以删除这篇文章。

我遇到了一个问题,要用一个值将熊猫数据帧拆分为不同的数据帧(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

所以我想将此df拆分为不同的数据帧。我找不到实现此目的的方法,但是我敢肯定必须有一种简单的方法。我在示例输出中显示的格式可能是错误的格式。因此,如果您有更好的主意,我希望看到。谢谢您的帮助。

我想要的示例输出

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:3)

您可以检查var1endValue的位置,取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