In [4]: df = read_csv(StringIO(data),sep='s+')In [5]: dfOut[5]: A B C0 1 0.749065 This1 2 0.301084 is2 3 0.463468 a3 4 0.643961 random4 1 0.866521 string5 2 0.120737 !In [6]: df.dtypesOut[6]: A int64B float64C objectdtype: object
应用自己的函数时,不会自动排除非数字列。这会慢一些,但比应用
.sum()到
groupby
In [8]: df.groupby('A').apply(lambda x: x.sum())Out[8]: A BCA 1 2 1.615586 Thisstring2 4 0.421821 is!3 3 0.463468a4 4 0.643961 random
sum默认情况下串联
In [9]: df.groupby('A')['C'].apply(lambda x: x.sum())Out[9]: A1 Thisstring2is!3 a4 randomdtype: object
你几乎可以做你想做的
In [11]: df.groupby('A')['C'].apply(lambda x: "{%s}" % ', '.join(x))Out[11]: A1 {This, string}2{is, !}3 {a}4 {random}dtype: object
在整个框架上一次执行一次。关键是要返回一个
Series
def f(x): return Series(dict(A = x['A'].sum(), B = x['B'].sum(), C = "{%s}" % ', '.join(x['C'])))In [14]: df.groupby('A').apply(f)Out[14]: A B CA 1 2 1.615586 {This, string}2 4 0.421821 {is, !}3 3 0.463468 {a}4 4 0.643961 {random}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)