我有一个包含类似数据的大型数据集:
>>> df = pd.DataFrame(
... {'A': ['one', 'two', 'two', 'one', 'one', 'three'],
... 'B': ['a', 'b', 'c', 'a', 'a', np.nan]})
>>> df
A B
0 one a
1 two b
2 two c
3 one a
4 one a
5 three NaN
有两个聚合函数“any”和“unique”:
>>> df.groupby('A')['B'].any()
A
one True
three False
two True
Name: B, dtype: bool
>>> df.groupby('A')['B'].unique()
A
one [a]
three [nan]
two [b, c]
Name: B, dtype: object
但我想得到下面的结果(或接近它的结果):
A
one a
three False
two True
我可以用一些复杂的代码来做,但最好是在python包中找到合适的函数或最简单的方法来解决问题。如果你能帮助我,我将不胜感激。
4条答案
按热度按时间xj3cbfub1#
您可以聚合第一列的
Series.nunique
和唯一值,并删除其他列的可能缺失值:然后,如果列
count
大于1
,则创建掩码,如果count
等于1
,则用uniq_without_NaNs
替换值:hfsqlsce2#
gab6jxml3#
您可以将
groupby
与agg
组合,并使用布尔掩码来选择正确的输出:输出:
ehxuflar4#
这将为您提供:
现在如果我们想找到这些值,我们可以做:
其给出: