[英]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.