在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公司:
但是,我强烈建议您考虑一种不同的技术,它不涉及明确地拆分组并分别处理它们,这是非常低效的。你知道吗
以下代码可以按A列的值提取值
如果不想将它们合并回df,可以按列A对值进行排序
您可以得到以下结果:
相关问题 更多 >
编程相关推荐