DataFrame
使用apply
函数
df = pd.DataFrame({'x':[1,2,3,4,5],'y':['a','a','b','b','c']})
df
x y
0 1 a
1 2 a
2 3 b
3 4 b
4 5 c
要使得df
的x和y值拼接起来,增加为一列,可以使用apply
函数:
def f(df):
return str(df.x) + df.y
df['z'] = df.apply(f, axis=1)
df
x y z
0 1 a 1a
1 2 a 2a
2 3 b 3b
3 4 b 4b
4 5 c 5c
apply
默认的是传递整个dataframe,这里注意要加上axis=1
,默认的是axis=0
是把函数按照每一列进行变换,而axis=1
为按照每一行进行转换
可以使用lambda
函数:
df['zz'] = df.apply(lambda df: str(df.x)+df.y, axis=1)
#更有效率地,使用join,而不使用“+”
df['zz'] = df.apply(lambda df: "".join([str(df.x),df.y]), axis=1)
x y z zz
0 1 a 1a 1a
1 2 a 2a 2a
2 3 b 3b 3b
3 4 b 4b 4b
4 5 c 5c 5c
数据透视表的实现
数据透视表有多种实现方式,一些包装方法如pivot和pivot_table都可以实现,但是也具有局限性,这里使用更一般的方法。
df = pd.DataFrame({'birth':[2000,2000,2000,2001,2001,2001,2002,2002,2002],\
'name':['a','a','a','b','b','b','c' ,'c','c'],'code':[1,1,1,2,2,2,3,3,3],\
'habit':['drink','smoke','drink','eat','smoke','drink','eat','smoke','drink',],\
'value':['little','a few','some','some','little','a few','little','a few','some']})
df
birth code habit name value
0 2000 1 drink a little
1 2000 1 smoke a a few
2 2000 1 drink a some
3 2001 2 eat b some
4 2001 2 smoke b little
5 2001 2 drink