那么有没有一种方法可以对 DataFrame 对象进行分组,然后对于剩余的列,将所有条目放入一个集合(或具有过滤的唯一值的列表)中。所以像这样的事情
Name Date Amount purchase
0 Jack 2016-01-31 10 'apple'
1 Jack 2016-02-29 5 25
2 Jack 2016-02-29 8 'B+'
3 Jill 2016-01-31 10 'D2'
4 Jill 2016-02-29 5 E
4 Jill 2016-02-29 5 E
并按前两列分组后输出。
Name Date Amount purchase
0 Jack 2016-01-31 [10] [apple]
1 Jack 2016-02-29 [5,8] [25,'B+']
3 Jill 2016-01-31 [10] ['D2']
4 Jill 2016-02-29 [5] ['E']
所以我可以对每一列进行操作df_data = df.groupby(['Name', 'Date'])['Amount'].apply(set)
然后将它们连接起来,但是如果列表很长,是否有更短更优雅的解决方案?
不要这样做
Pandas 从来没有被设计为以系列/列的形式保存列表。您可以设计昂贵的解决方法,但不建议使用这些方法。
不建议连续保存列表的主要原因是您会失去与使用连续内存块中保存的 NumPy 数组相关的矢量化功能。您的系列将是object
dtype,表示一系列指针,很像list
.
当然,object
dtype 对于混合类型是不可避免的。但是,在这里,嵌套指针结构加剧了这种效果。您将失去内存和性能方面的优势,以及对优化的 Pandas 方法的访问权。
稍微好一点的替代方案
您可以聚合为字符串,这样您就只有一层指针:
res = df.groupby(['Name', 'Date'], as_index=False)[['Amount', 'purchase']]\
.agg(lambda x: ', '.join(map(str, set(x))))
print(res)
Name Date Amount purchase
0 Jack 2016-01-31 10 'apple'
1 Jack 2016-02-29 8, 5 'B+', 25
2 Jill 2016-01-31 10 'D2'
3 Jill 2016-02-29 5 E
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)