Python 在Pandas中高效地分组、编辑和重新加入组

Python 在Pandas中高效地分组、编辑和重新加入组,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,在pandas中,我一直在寻找一个通用流程,以按某个列对数据帧进行分组,对这些组执行非平凡操作,然后将这些组重新组合回一个大数据帧(通过有效地将它们堆叠在一起) 假设我有一个数据帧df: +----+-------+---+---+---+ | | A | B | C | D | +----+-------+---+---+---+ | 0 | Green | 1 | 4 | 5 | | 1 | Red | 2 | 3 | 2 | | 2 | Red | 1 | 4

在pandas中,我一直在寻找一个通用流程,以按某个列对数据帧进行分组,对这些组执行非平凡操作,然后将这些组重新组合回一个大数据帧(通过有效地将它们堆叠在一起)

假设我有一个数据帧
df

+----+-------+---+---+---+
|    |   A   | B | C | D |
+----+-------+---+---+---+
|  0 | Green | 1 | 4 | 5 |
|  1 | Red   | 2 | 3 | 2 |
|  2 | Red   | 1 | 4 | 3 |
|  3 | Green | 2 | 2 | 2 |
|  4 | Green | 1 | 1 | 1 |
|  5 | Blue  | 2 | 1 | 5 |
|  6 | Red   | 2 | 1 | 6 |
|  7 | Blue  | 7 | 8 | 9 |
|  8 | Green | 7 | 6 | 5 |
|  9 | Red   | 0 | 9 | 0 |
| 10 | Blue  | 4 | 5 | 4 |
+----+-------+---+---+---+
我想创建一个groupby()列,然后对每个组执行一个操作。通常,此操作涉及通过将一行中的值与所有行中的值进行比较来创建新行,因此我不会说这可以通过应用于组的lambda函数来完成。然后,我想将这些组重新组合到dataframe中,有效地使用与上面相同的格式,但使用插入的行

到目前为止,我的一般做法是以“缓慢而愚蠢”的方式进行,即:

group_list = []

g = df.groupby("A")
for i, group in g:

  ###Perform some weird operation on group that can't really be reduced to a 
  #lambda function applied to each group. 

  group_list.append(group)

reconstituted = group_list[0]
for i in range(1,len(group_list)):
  reconstituted = reconstituted.append(group_list[i], ignore_index=True)

显然,这并不是一个特别好的方法,所以这就是我的问题——什么是更好的方法来对这些团体本身进行运作,然后重组它们

在不了解函数功能的情况下,如果您只想将它们重新连接,则可以使用:

MVCE:



<>但是,我会敦促你考虑一种不同的技术,它不包括明确地分割组和单独处理它们,这是非常低效的。p> 在不了解函数功能的情况下,如果您只想将它们重新连接,则可以使用:

MVCE:



<>但是,我会敦促你考虑一种不同的技术,它不包括明确地分割组和单独处理它们,这是非常低效的。p> 以下代码可以通过A列的值提取值

import pandas as pd

df = pd.DataFrame([{'A': 'Green', 'B': 1}, {'A': 'Red', 'B': 2}, {'A': 'Green', 'B': 3}])

for value in df.A.unique():
    print(df[df.A == value])
如果不想将它们合并回df,可以按A列对值进行排序

df.sort_values("A")
您可以得到以下结果:

       A  B
0  Green  1
2  Green  3
1    Red  2

以下代码可以通过列A的值提取值

import pandas as pd

df = pd.DataFrame([{'A': 'Green', 'B': 1}, {'A': 'Red', 'B': 2}, {'A': 'Green', 'B': 3}])

for value in df.A.unique():
    print(df[df.A == value])
如果不想将它们合并回df,可以按A列对值进行排序

df.sort_values("A")
您可以得到以下结果:

       A  B
0  Green  1
2  Green  3
1    Red  2

不确定要做什么,但可以按列的值排序来完成任务吗?df.sort_值(“A”)或df.sort(“A”)不确定要执行什么操作,但可以按列的值进行排序吗?df.sort溳值(“A”)或df.sort(“A”)Hi,感谢响应-
concat
至少会改进最后几行。是的,在尝试了一些方法之后,我将围绕操纵groupby对象创建一个新问题。您好,感谢您的回答-
concat
至少会改进最后几行。完成。是的,在尝试了一些方法之后,我将围绕操纵groupby对象创建一个新问题。