gpt4 book ai didi

python - 在 DataFrameGroupBy 上使用切片

转载 作者:行者123 更新时间:2023-12-04 15:17:34 24 4
gpt4 key购买 nike

我需要在 DataFrameGroupBy 对象上使用 slice

例如,假设有 DataFrameA-Z 列,如果我想使用 A-C 列,我将使用 .loc [:, 'A':'C'],但是当我使用 DataFrameGroupBy 时,我不能使用切片所以我必须写 [['A' , 'B', 'C']]

看这里:

from numpy import around
from numpy.random import uniform
from pandas import DataFrame
from string import ascii_lowercase

data = around(a=uniform(low=1.0, high=50.0, size=(6, len(ascii_lowercase) + 1)), decimals=3)
df = DataFrame(data=data, columns=['group'] + list(ascii_lowercase), dtype='float64')

rows, columns = df.shape
df.loc[:rows // 2, 'group'] = 1.0
df.loc[rows // 2:, 'group'] = 2.0

print(df)
abc = df.groupby(by='group')[['a', 'b', 'c']].shift(periods=1)
print(abc)

df 的输出是:

   group       a       b       c  ...       w       x       y       z
0 1.0 22.380 36.873 10.073 ... 26.052 38.625 48.122 33.841
1 1.0 16.702 32.160 35.018 ... 12.990 17.878 19.297 16.330
2 1.0 9.957 25.202 7.106 ... 46.500 12.932 37.401 43.134
3 2.0 42.395 40.616 24.611 ... 30.436 33.521 42.136 2.690
4 2.0 2.069 29.891 2.217 ... 20.734 12.365 9.302 47.019
5 2.0 4.208 23.955 33.966 ... 45.439 16.488 32.892 9.345

abc 的输出是:

        a       b       c
0 NaN NaN NaN
1 22.380 36.873 10.073
2 16.702 32.160 35.018
3 NaN NaN NaN
4 42.395 40.616 24.611
5 2.069 29.891 2.217

如何避免使用 [['a', 'b', 'c']]?我有 105 列需要写在那里,我想使用像 .loc[:, 'a':'c']

这样的切片

谢谢大家:)

最佳答案

您可以按系列 df['group'] 进行分组,因此可以在 groupby 之前过滤列以仅传递过滤后的列名:

abc = df.loc[:, 'a':'c'].groupby(by=df['group']).shift(periods=1)
print(abc)
a b c
0 NaN NaN NaN
1 37.999 21.197 39.527
2 35.560 27.214 23.211
3 NaN NaN NaN
4 49.053 11.319 37.279
5 27.881 38.529 46.550

另一个想法是使用:

cols = df.loc[:, 'a':'c'].columns
abc = df.groupby(by='group')[cols].shift(periods=1)

关于python - 在 DataFrameGroupBy 上使用切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64027054/

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