Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用用于创建子帧的同一groupby调用对数据帧的子帧应用groupby_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 如何使用用于创建子帧的同一groupby调用对数据帧的子帧应用groupby

Python 如何使用用于创建子帧的同一groupby调用对数据帧的子帧应用groupby,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,下面的代码显示,重新分组传递了原始数据帧的子帧。此子帧有一列books,但是当函数regroup尝试调用'df.groupby('books')时,即使groupby前面的行打印了数据帧,也会引发错误。所以我的问题是: 如何迭代groupby(expr)的子帧,以便将这些子帧传递给另一个函数,该函数也可以在该子帧上调用groupby(expr),其中expr对于初始和后续调用是完全相同的 import pandas as pd def divider(): print("--

下面的代码显示,
重新分组
传递了原始数据帧的子帧。此子帧有一列
books
,但是当函数
regroup
尝试调用'df.groupby('books')时,即使groupby前面的行打印了数据帧,也会引发错误。所以我的问题是:

如何迭代
groupby(expr)
的子帧,以便将这些子帧传递给另一个函数,该函数也可以在该子帧上调用
groupby(expr)
,其中
expr
对于初始和后续调用是完全相同的

import pandas as pd

def divider():
    print("-----------------------")

def section(label, start=True):
    if not start:
        label = f"<END {label}>"
    else:
        label = f"<BEGIN {label}>"
    print(label)

def endsection(label):
    section(label, start=False)

def regroup(df):
    section("regroup")
    print(f"   input df={df}")
    gb = df.groupby('books')
    for group in gb:
        _df = pd.DataFrame(group)
        print(_df)
    endsection("regroup")

df = pd.DataFrame({"books" : ["abc", "def", "abc", "xyz", "def"], #
                   "b" : [2, 5, 3, 2, 6],
                   "c" : [-5, 2, 1, 8, 2]})

print(df)
gb = df.groupby('books')

section("groups")
for group in gb:
    _df = pd.DataFrame(group)
    print(_df)
    regroup(_df)
endsection("groups")
将熊猫作为pd导入
def分配器():
打印(-----------------------------------)
def部分(标签,开始=真):
如果没有启动:
标签=f“”
其他:
标签=f“”
打印(标签)
def结束部分(标签):
节(标签,开始=假)
def重组(df):
第节(“重组”)
打印(f“输入df={df}”)
gb=df.groupby('books'))
对于gb中的组:
_df=pd.数据帧(组)
打印(_-df)
结束部分(“重组”)
df=pd.DataFrame({“books”:[“abc”、“def”、“abc”、“xyz”、“def”]#
“b”:[2,5,3,2,6],
“c”:[-5,2,1,8,2]})
打印(df)
gb=df.groupby('books'))
第节(“集团”)
对于gb中的组:
_df=pd.数据帧(组)
打印(_-df)
重组
结束部分(“组”)
您只需执行以下操作:

def regroup(df):
    section("regroup")
    print(f"   input df={df}")
    gb = df.groupby('books')

    # differences lie here
    for book, group in gb:
        _df = pd.DataFrame(group)
        print(_df)
    endsection("regroup")
输出:

<BEGIN regroup>
   input df=  books  b  c
0   abc  2 -5
1   def  5  2
2   abc  3  1
3   xyz  2  8
4   def  6  2
  books  b  c
0   abc  2 -5
2   abc  3  1
  books  b  c
1   def  5  2
4   def  6  2
  books  b  c
3   xyz  2  8
<END regroup>

输入df=书籍b c
0 abc 2-5
1 def 5 2
2 abc 3 1
3xyz28
4 def 6 2
书籍b c
0 abc 2-5
2 abc 3 1
书籍b c
1 def 5 2
4 def 6 2
书籍b c
3xyz28

是的,出于一些奇怪的原因,当您在groupby中对x执行
操作时,结果与在groupby中对i,x执行
操作时不同
。。。。为什么呢?这有记录吗?@TerrenceBrannon在这篇文章中是这样说的。因此,当您对gb:
中的组执行
操作时,
实际上是一对
(书籍名称,子框架)