如何在熊猫中按行对数据进行分组

时间:2021-03-28 19:55:32

标签: python pandas dataframe data-analysis data-manipulation

我有一个看起来像这样的数据集

        Fault ID    REPORT_DATE INITIAL_MFL
0       ID000001    2014-01-01  CE
1       ID000002    2014-01-01  CA
2       ID000003    2014-01-01  OTHER
3       ID000004    2014-01-01  OK
4       ID000005    2014-01-01  LN
...       ...        ...    ...
275586  ID275581    2017-03-31  CE
275587  ID275586    2017-03-31  CE
275588  ID275589    2017-03-31  CA
275589  ID275590    2017-03-31  CA
275590  ID275591    2017-03-31  OK

我想按日期对它们进行分组。 例如

REPORT_DATE INITIAL_MFL                 CE CA OK LN OTHERS
2014-01-01  [CE, CA, OTHERS, OK, ...]    2  1  5  3      6
2014-01-02  [CE, CA, OTHERS, OK, ...]    2  1  5  3      6

一天内可能会发生许多故障。所以,我需要将它们分组并在其基础上创建一个新列。我不知道该怎么做。

如果你能帮助我解决这个问题,我将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:3)

假设你有这个数据框:

   Fault ID REPORT_DATE INITIAL_MFL
0  ID000001  2014-01-01          CE
1  ID000002  2014-01-01          CA
2  ID000003  2014-01-01       OTHER
3  ID000004  2014-01-01          OK
4  ID000005  2014-01-01          LN
5  ID275581  2017-03-31          CE
6  ID275586  2017-03-31          CE
7  ID275589  2017-03-31          CA
8  ID275590  2017-03-31          CA
9  ID275591  2017-03-31          OK

然后你可以这样做:

from collections import Counter

g = df.groupby("REPORT_DATE")["INITIAL_MFL"].agg(list)
c = pd.DataFrame(g.apply(Counter).tolist(), index=g.index)
df_out = g.to_frame().join(c)
print(df_out)

打印:

                         INITIAL_MFL  CE  CA  OTHER  OK   LN
REPORT_DATE                                                 
2014-01-01   [CE, CA, OTHER, OK, LN]   1   1    1.0   1  1.0
2017-03-31      [CE, CE, CA, CA, OK]   2   2    NaN   1  NaN