Python-Pandas-通过条件字符串添加GroupB

时间:2018-08-16 14:43:55

标签: python string pandas group-by

目前,在对数据帧进行分组时,我无法设置设置列表和过滤的组合。

假设我们有一个以下形式的DataFrame:

      A       B    C
0    x2   a32cd    1
1    x1   a11aa    0
2    x1     NaN    1 
3    x1   d75dd    0
4    x1   a11aa    1
5    x2   a32cd    1
6    x2   w22xz    0
...

我要寻找的是对列A(字符串)进行分组,然后列出非重复非空的列表值B(字符串),我可以退出列表C(整数)。我要寻找的最终形式如下:

      A           B 
0    x1   [a11aa, d75dd, ...]
1    x2   [a32cd, w22xz, ...]

我正在考虑采用以下形式进行设置:

df_x.groupby('A')['B'].apply(list)

,然后对其应用一些条件,但是我似乎找不到它。我应该为此设置一个功能吗?我来自基于MATLAB的背景,因此我倾向于逐行遍历整个DataFrame。但是有人告诉我,一旦您考虑在Pandas中进行此操作,可能会有更明智的方法。

2 个答案:

答案 0 :(得分:3)

>>> df.dropna().groupby("A")["B"].unique()
A
x1    [a11aa, d75dd]
x2    [a32cd, w22xz]
dtype: object

答案 1 :(得分:1)

也许您不希望直接dropna(丢失其他列,例如C上的信息)。

因此,您可以groupbyagg使用仅B的逻辑

df.groupby('A').B.agg(lambda s: s.dropna().unique().tolist())

A
x1    [a11aa, d75dd]
x2    [a32cd, w22xz]
Name: B, dtype: object