python - 通过在列中重复范围来分隔 pandas df

标签 python pandas

问题:

我正在尝试按 A 列中的重复范围拆分 Pandas 数据框。我的数据和输出如下。 A 列中的范围始终递增并且不会跳过值。但是,A 列中的值确实可以任意开始和停止。

数据:

import pandas as pd

dict = {"A": [1,2,3,2,3,4,3,4,5,6],
        "B": ["a","b","c","d","e","f","g","h","i","k"]}

df = pd.DataFrame(dict)

df

   A  B
0  1  a
1  2  b
2  3  c
3  2  d
4  3  e
5  4  f
6  3  g
7  4  h
8  5  i
9  6  k

期望的输出:

df1

   A  B
0  1  a
1  2  b
2  3  c

df2

   A  B
0  2  d
1  3  e
2  4  f

df3

   A  B
0  3  g
1  4  h
2  5  i
3  6  k

多谢指教!

回答时间:

from timeit import default_timer as timer

start = timer()
for x ,y in df.groupby(df.A.diff().ne(1).cumsum()):
    print(y)
end = timer()
aa = end - start

start = timer()
s = (df.A.diff() != 1).cumsum()
g = df.groupby(s) 
for _,g_ in g:
    print(g_)
end = timer()
bb = end - start

start = timer()
[*(d for _, d in df.groupby(df.A.diff().ne(1).cumsum()))]
print(*(d for _, d in df.groupby(df.A.diff().ne(1).cumsum())), sep='\n\n')
end = timer()
cc = end - start

print(aa,bb,cc)

0.0176649530000077 0.018132143000002543 0.018715283999995336

最佳答案

使用 diffcumsum 创建 groupby 键>

for x ,y in df.groupby(df.A.diff().ne(1).cumsum()):
    print(y)

   A  B
0  1  a
1  2  b
2  3  c
   A  B
3  2  d
4  3  e
5  4  f
   A  B
6  3  g
7  4  h
8  5  i
9  6  k

关于python - 通过在列中重复范围来分隔 pandas df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748743/

相关文章:

python - numpy 是否在其*所有*功能中广播?

python - 如何使用身份验证从 Cloud Scheduler 调用 Cloud Function

Python Pandas 过滤;类型错误 : cannot convert the series to <class 'int' >

python - 使用 DatetimeIndex 重新采样 DataFrame 并保留日期范围

python - 如何为 Python 中的对象添加 "attach"功能,例如到 Pandas 数据框?

python - 如何比较需求文件和实际安装的 Python 模块?

Python解析超过4GB的大数据库

python - 如何在jinja2中获取带有空格的整个字符串

python - 使用 .head() 方法更改 Pandas 单元格中打印的文本量

python - 如何在 Pandas DataFrame 散点图中添加图例?