目前,在对数据帧进行分组时,我无法设置设置列表和过滤的组合。
假设我们有一个以下形式的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中进行此操作,可能会有更明智的方法。
答案 0 :(得分:3)
>>> df.dropna().groupby("A")["B"].unique()
A
x1 [a11aa, d75dd]
x2 [a32cd, w22xz]
dtype: object
答案 1 :(得分:1)
也许您不希望直接dropna
(丢失其他列,例如C
上的信息)。
因此,您可以groupby
和agg
使用仅B
的逻辑
df.groupby('A').B.agg(lambda s: s.dropna().unique().tolist())
A
x1 [a11aa, d75dd]
x2 [a32cd, w22xz]
Name: B, dtype: object