Python 熊猫可以使用groupby的列表吗?

Python 熊猫可以使用groupby的列表吗?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,输出为: import pandas as pd import numpy as np rng = np.random.RandomState(0) df = pd.DataFrame({'key':['A', 'B', 'C', 'A', 'B', 'C'], 'data1': range(6), 'data2': rng.randint(0, 10, 6)}, columns=

输出为:

import pandas as pd
import numpy as np

rng = np.random.RandomState(0)
df = pd.DataFrame({'key':['A', 'B', 'C', 'A', 'B', 'C'],
                   'data1': range(6),
                   'data2': rng.randint(0, 10, 6)}, 
                  columns=['key', 'data1', 'data2'])
df

   key data1 data2
0   A   0   5
1   B   1   0
2   C   2   3
3   A   3   3
4   B   4   7
5   C   5   9


L = [0, 1, 0, 1, 2, 0]
print(df.groupby(L).sum())

我需要一个清楚的解释,拜托?!
L
中的0、1和2是什么?它们是
df
列吗?或者它们是
df
的索引标签?以及groupby如何根据
L
进行分组

在您的示例中,L是整数列表。正如你所说:看看这个整数列表,根据这些唯一的整数对我的df进行分组

我认为将其可视化是有意义的(注意df没有L列-我只是为了可视化添加了它):

groupby L means-获取唯一值(在本例中为0,1和2)并对数据1和数据2求和。因此,当L=0时,data1的结果将是data1:0+2+5=7(以此类推)

最终结果将是:

  data1 data2
0   7   17
1   4   3
2   4   7


您可以使用列表对数据框中的观察值进行分组。例如,假设你有几个人的身高:

    data1   data2
0   7       17
1   4       3
2   4       7
在其他地方,您收到了他们指定的组:

   names  height
0   John     180
1   Mark     180
2   Fred     180
3  Julia     160
4   Mary     160
您不需要将新列连接到
数据帧
,只需将它们分组即可。您可以使用列表来完成以下工作:

sex = ['man', 'man', 'man', 'woman', 'woman']

您可以在这里看到它的工作原理:

       height
man       180
woman     160
在L中,它将0键分组,即ACC,索引0,2m5。1键为BA,索引1,3,两键为B,索引4

这是因为L键对齐:

In [6002]: list(df.groupby(L))                                                                                                                                                                 
Out[6002]: 
[(0,   key  data1  data2
  0   A      0      5
  2   C      2      3
  5   C      5      9), 
(1,   key  data1  data2
  1   B      1      0
  3   A      3      3), 
(2,   key  data1  data2
  4   B      4      7)]

我希望这是有意义的

L是一个用于对数据帧进行分组的值列表。如果用a替换所有0,用b替换1,用c替换2,则会得到完全相同的结果。它们不必是a,b,c,它们也可以是r,p,l或其他任何形式。然而,L的长度应该与数据帧的长度相同,如果不是,它将不起作用。非常感谢!已经两天了,我想不出来了。“我现在知道了。”帕里萨·扎里这就是为什么Stackoverflow会在这里。很高兴我能帮忙
df.groupby(sex).mean()
       height
man       180
woman     160
In [6006]: df.groupby(L).agg(list)                                                                                                                                                             
Out[6006]: 
         key      data1      data2
0  [A, C, C]  [0, 2, 5]  [5, 3, 9]
1     [B, A]     [1, 3]     [0, 3]
2        [B]        [4]        [7]
In [6002]: list(df.groupby(L))                                                                                                                                                                 
Out[6002]: 
[(0,   key  data1  data2
  0   A      0      5
  2   C      2      3
  5   C      5      9), 
(1,   key  data1  data2
  1   B      1      0
  3   A      3      3), 
(2,   key  data1  data2
  4   B      4      7)]
df['L'] = L

  key  data1  data2  L
0   A      0      5  0
1   B      1      0  1
2   C      2      3  0
3   A      3      3  1
4   B      4      7  2
5   C      5      9  0