繁体   English   中英

根据列中的重复值范围从 pandas df 获取数据块

[英]Take chunks of data from pandas df based on repeated values ranges in a column

我想根据特定列中的重复值范围从 pandas dataframe 中获取 select 数据。 例如,我在下面有 df。

range_col col1 col2
  1        a   b
  2        c   d
  3        e   f
  1        m   n
  2        o   p
  3        r   s
  1        e   f
  2        j   k
  3        l   m 

在上面的 df 中,我想通过从range_col中选择范围1 2 3来遍历数据块。 所以第一个块将是

range_col col1 col2
  1        a   b
  2        c   d
  3        e   f

其次将是

range_col col1 col2
  1        m   n
  2        o   p
  3        r   s

ETC...

我怎样才能像这样迭代 df ?

你可以这样做:

for _, group in df.groupby(df['range_col'] - df.index, sort=False):
    print(group)
    print()

Output

    range_col col1 col2
0          1    a    b
1          2    c    d
2          3    e    f

   range_col col1 col2
3          1    m    n
4          2    o    p
5          3    r    s

   range_col col1 col2
6          1    e    f
7          2    j    k
8          3    l    m

这是基于来自 itertools 的旧配方,请参见此处

使用Series.cumsum + Series.min (参见Detail of groups )使用DataFrame.groupby创建组:

groups=(df['range_col']==df['range_col'].min()).cumsum()
for i,group in df.groupby(groups):
    print(group)
    print('-'*20)

Output:

       range_col col1 col2
0          1    a    b
1          2    c    d
2          3    e    f
--------------------
   range_col col1 col2
3          1    m    n
4          2    o    p
5          3    r    s
--------------------
   range_col col1 col2
6          1    e    f
7          2    j    k
8          3    l    m
--------------------

细节:

print(groups)
0    1
1    1
2    1
3    2
4    2
5    2
6    3
7    3
8    3
Name: range_col, dtype: int64

您可以将数据框保存在字典中:

groups=(df['range_col']==df['range_col'].min()).cumsum()
dfn={i:group for i,group in df.groupby(groups)}

for n in dfn:
    print(f'df[{n}]')
    print(dfn[n])
    print('-'*20)

df[1]
   range_col col1 col2
0          1    a    b
1          2    c    d
2          3    e    f
--------------------
df[2]
   range_col col1 col2
3          1    m    n
4          2    o    p
5          3    r    s
--------------------
df[3]
   range_col col1 col2
6          1    e    f
7          2    j    k
8          3    l    m
--------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM