2017-10-13 52 views
2

熊猫数据分析我对面,我们有以下的列的表的例子就是:pivot_table与索引不是表的列

name(string) sex(string) year(int) birth(int) 

笔者想汇总计算名字的一年,性别和最后一个字母,所以他的作用:

# extract last letter from name column 
get_last_letter = lambda x: x[-1] 
last_letters = names.name.map(get_last_letter) 

last_letters.name = 'last_letter' 
table = names.pivot_table(values='births', index=last_letters, 
columns=['sex', 'year'], aggfunc=np.sum) 

我不太明白如何当last_letters不在表中的列此pivot_table被创建。 有人可以阐明熊猫如何能够names正确地映射到这些last_letters聚合?

回答

3

DataFrame中的列为Series,因此可能使用Series作为pivot_table中的参数。

所以有可能使用预处理列name自定义函数只返回最后一个字母,因为它返回Series什么是完美的有效输入。

样品:

names = pd.DataFrame({ 
    'name': ['John','John','John','Josh','Josh','Josh','Sara','Sara','Sara'], 
    'births': [10,20,10,40,70,10,20,30,50], 
    'year': [1980,1985,1980,1985,1985,1985,1985,1980,1980], 
    'sex': ['m','m','m','m','m','m','f','f','f'] 
}) 
print (names) 
    births name sex year 
0  10 John m 1980 
1  20 John m 1985 
2  10 John m 1980 
3  40 Josh m 1985 
4  70 Josh m 1985 
5  10 Josh m 1985 
6  20 Sara f 1985 
7  30 Sara f 1980 
8  50 Sara f 1980 

# extract last letter from name column 
get_last_letter = lambda x: x[-1] 
last_letters = names.name.map(get_last_letter) 
last_letters.name = 'last_letter' 

print (last_letters) 
0 n 
1 n 
2 n 
3 h 
4 h 
5 h 
6 a 
7 a 
8 a 
Name: last_letter, dtype: object 

print (type(last_letters)) 
<class 'pandas.core.series.Series'> 

table = names.pivot_table(values='births', index=last_letters, 
          columns=['sex', 'year'], aggfunc=np.sum) 

print (table) 
sex    f   m  
year   1980 1985 1980 1985 
last_letter       
a   80.0 20.0 NaN NaN 
h    NaN NaN NaN 120.0 
n    NaN NaN 20.0 20.0 
+0

肯定,但如何大熊猫知道它应该聚集和准与索引'了'只有那些'name's那以'a'结尾? –

+0

因为'last_letters'是Series,请给我一些时间,我创建示例。 – jezrael

+0

谢谢你的样品!只是为了澄清,如果我试图传递与'last_letters'相同的信息,但在'list'而不是'Series'中,它会崩溃,对吗?那么这是否意味着'Series'存储的信息是“我是从表格中的一列创建的”,所以如果您将它用作“索引”,表格会知道该怎么做? –

相关问题