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:
中的组执行操作时,组
实际上是一对(书籍名称,子框架)
。