pandas.Series 的变换奥义:
1、在于 apply函数
def f(series的每一个元素):
return 你希望得到的最终元素
S = pd.Series([1,2,3])
S.apply(f)
妙用1:充当一个筛选条件(def的结果返回boolean)
def f(in_):
if 'csdn' in in_:
return True
filt = S.apply(f) # 形成了一列True or False , 长度等于 S.shape[0]
S_csdn_part = S[filt] # 解决series.str没有contains方法的烦恼
def f(in_):
return len(S[S==in_]) #def的结果类似于SQL的各种self-join
# 新手甚至会用很重value_counts后去merge(how = 'left') 这会复杂而易错
S_window_count = S.apply(f) # 解决了pandas并不友好支持SQL中window - function的痛苦
当然,这种一步骤的def,推荐可读性更高的lambda
S_window_count = S.apply(lambda x: len(S[S==x]) ) # 真正意义上的比SQL更简洁