gpt4 book ai didi

python-2.7 - 组内顺序应用函数

转载 作者:行者123 更新时间:2023-12-02 03:35:02 25 4
gpt4 key购买 nike

有了代码(下面),我试图确定特定的组顺序总是与原始数据帧中的相同。

它看起来像是为我的小示例保留的组内顺序,但如果我的数据框包含约 100 万条记录怎么办? pandas 会提供这样的保证吗,我应该自己担心吗?

代码:

import numpy as np
import pandas as pd

N = 10
df = pd.DataFrame(index = xrange(N))
df['A'] = map(lambda x: int(x) / 5, np.random.randn(N) * 10.0)
df['B'] = map(lambda x: int(x) / 5, np.random.randn(N) * 10.0)
df['v'] = np.random.randn(N)

def show_x(x):
print x
print "----------------"
df.groupby('A').apply(show_x)
print "==============="
print df

输出:

   A  B         v
6 -4 -1 -2.047354

[1 rows x 3 columns]
----------------
A B v
6 -4 -1 -2.047354

[1 rows x 3 columns]
----------------
A B v
8 -3 0 -1.190831

[1 rows x 3 columns]
----------------
A B v
0 -1 -1 0.456397
9 -1 -2 -1.329169

[2 rows x 3 columns]
----------------
A B v
1 0 0 0.663928
2 0 2 0.626204
7 0 -3 -0.539166

[3 rows x 3 columns]
----------------
A B v
4 2 2 -1.115721
5 2 1 -1.905266

[2 rows x 3 columns]
----------------
A B v
3 4 -1 0.751016

[1 rows x 3 columns]
----------------
===============
A B v
0 -1 -1 0.456397
1 0 0 0.663928
2 0 2 0.626204
3 4 -1 0.751016
4 2 2 -1.115721
5 2 1 -1.905266
6 -4 -1 -2.047354
7 0 -3 -0.539166
8 -3 0 -1.190831
9 -1 -2 -1.329169

[10 rows x 3 columns]

最佳答案

如果您使用的是 apply ,不仅不能保证顺序,而且正如您发现的那样,它可以多次触发同一组的功能(决定采取哪条“路径”/要获得什么类型的结果)返回)。因此,如果您的函数有副作用,请不要这样做!

我建议简单地遍历 groupby 对象!

In [11]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['A', 'B'])

In [12]: df
Out[12]:
A B
0 1 2
1 1 4
2 5 6

In [13]: g = df.groupby('A')

In [14]: for key, sub_df in g:
print("key =", key)
print(sub_df)
print('') # apply whatever function you want
key = 1
A B
0 1 2
1 1 4

key = 5
A B
2 5 6

请注意,此有序的(与级别相同)参见g.grouper._get_group_keys():

In [21]: g.grouper.levels
Out[21]: [Int64Index([1, 5], dtype='int64')]

它是默认排序的(执行 groupby 时有一个 sort kwarg),如果它不是数字 dtype,则不清楚这实际上意味着什么。

关于python-2.7 - 组内顺序应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com