繁体   English   中英

聚合 pandas groupby all

[英]aggregate pandas groupby all

我有一个 dataframe,看起来像下面给出的那个。

item_id length height shape color
a       True
a       True
a              False
a              True
a                     True
b       True
b              True
b                     False
b                           True

我想做类似的事情

data_df.groupby('item_id').all().reset_index()

将 dataframe 转换为

item_id length height shape color
a       True   False  True  False
b       True   True   False True

我的问题是项目 a 的颜色应该是假的,因为它不存在,但结果是真的。

您可以在通常的df.groupby('item_id').all()框架和另一个框架之间进行逻辑与,该框架表示每列是否至少具有每个组的非 NaN 值。

df.groupby('item_id').all() & ~df.iloc[:,1:].isnull().groupby(df['item_id']).all()

Output

    length  height  shape   color
item_id             
a   True    False   True    False
b   True    True    False   True

在速度方面,我在具有 10k 行的 dataframe 上做了一个小基准测试。

%%timeit -r 4 -n 100
df.groupby('item_id').all()

%%timeit -r 4 -n 100
df.groupby('item_id').all() & ~df.iloc[:,1:].isnull().groupby(df['item_id']).all()

当有 9997 个不同的组时(每组约 1 行)

Incorrect solution: 31.1 ms ± 910 µs per loop (mean ± std. dev. of 4 runs, 100 loops each)
Correct solution: 45.8 ms ± 1.22 ms per loop (mean ± std. dev. of 4 runs, 100 loops each)

当有 625 个不同的组时(每组约 16 行)

Incorrect solution: 24 ms ± 211 µs per loop (mean ± std. dev. of 4 runs, 100 loops each)
Correct solution: 30.7 ms ± 417 µs per loop (mean ± std. dev. of 4 runs, 100 loops each)

所以正确解的速度应该与错误解的速度相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM