如何在应用 groupby 后获取 Dataframe,并且不应在 python 中的列表或字符串中

How to get Dataframe after applying groupby and should not be in list or string in python

Phone_no  Date     Problem
 1     2020-01-19   G
 1     2020-01-19   A
 1     2020-01-27   B
 1     2020-01-28   C
 1     2020-01-28   H
 2     2020-01-19   T
 3     2020-01-04   U
 3     2020-01-22   P
 4     2020-01-12   E
 5     2020-01-01   G
 5     2020-01-11   A
 2     2020-01-31   I
 2     2020-01-31   E

**我想在 Phone_no 上应用 groupby,日期和想要的数据应该在数据框中,如下所述 **

Phone_no  Date     Problem

1     2020-01-19    G,A
1     2020-01-27     B
1     2020-01-28    C,H
2     2020-01-19     T
2     2020-01-31    I,E
3     2020-01-04     U
3     2020-01-22     P
4     2020-01-12     E
5     2020-01-01     G
5     2020-01-11     A

您可以 groupby“Phone_no”和“日期”并使用 agg 应用 lambda 函数,每个组中的 joins“问题”值:

out = df.groupby(['Phone_no','Date'])['Problem'].agg(lambda x: ','.join(x)).reset_index()

或更简单的方式(感谢@Corralien):

out = df.groupby(['Phone_no','Date'], as_index=False)['Problem'].apply(','.join)

如果你想要元组:

out = df.groupby(['Phone_no','Date'])['Problem'].apply(tuple).reset_index()

输出:

   Phone_no        Date Problem
0         1  2020-01-19     G,A
1         1  2020-01-27       B
2         1  2020-01-28     C,H
3         2  2020-01-19       T
4         2  2020-01-31     I,E
5         3  2020-01-04       U
6         3  2020-01-22       P
7         4  2020-01-12       E
8         5  2020-01-01       G
9         5  2020-01-11       A