在python中使用全等x值打印
目标:在同一个图表上获得两个不同的名称。确保年复一年。注意,不是文件有两个年份(当女孩和男孩都有名字时),在这种情况下,为每个名字添加所有拆分年份的值 当前状态:一个名称正在工作。两个名称将索引更改为行号,而不是年份号 Y:‘prop’==该姓名(不论性别)占当年新生儿所有姓名的比例 X:‘年份’==出生证明的年份 有csv吗 代码: 谢谢大家 这些图表并不一致,因为多年来,女孩的名字叫“约瑟夫”,男孩的名字叫“南希” =======================================================2/13/2014在python中使用全等x值打印,python,matplotlib,pandas,Python,Matplotlib,Pandas,目标:在同一个图表上获得两个不同的名称。确保年复一年。注意,不是文件有两个年份(当女孩和男孩都有名字时),在这种情况下,为每个名字添加所有拆分年份的值 当前状态:一个名称正在工作。两个名称将索引更改为行号,而不是年份号 Y:‘prop’==该姓名(不论性别)占当年新生儿所有姓名的比例 X:‘年份’==出生证明的年份 有csv吗 代码: 谢谢大家 这些图表并不一致,因为多年来,女孩的名字叫“约瑟夫”,男孩的名字叫“南希” ====================================
In [12]:
import pandas
import pylab
import matplotlib
from pandas import *
from pylab import *
from matplotlib import *
names = read_csv(r'C:\Users\joe\Documents\Python\baby-names2.csv')
print (names.head())
import matplotlib as mpl
import matplotlib.pyplot as plt
userNames = ['Joseph', 'Nancy']
resultAry = names[names.name.isin(userNames)].set_index(['year','name','sex'])['prop']
resultAry = resultAry.groupby(level='name')
print (resultAry.head())
print ('***************')
resultAry = resultAry.groupby(level='year')
print (resultAry)
#resultAry = resultAry.plot()
year name prop sex soundex
0 1880 John 0.081541 boy J500
1 1880 William 0.080511 boy W450
2 1880 James 0.050057 boy J520
3 1880 Charles 0.045167 boy C642
4 1880 George 0.043292 boy G620
name year name sex
Joseph 1880 Joseph boy 0.022229
1881 Joseph boy 0.022679
1882 Joseph boy 0.021879
1883 Joseph boy 0.022367
1884 Joseph boy 0.022062
Nancy 1889 Nancy boy 0.000059
1933 Nancy boy 0.000044
1934 Nancy boy 0.000044
1935 Nancy boy 0.000042
1936 Nancy boy 0.000059
dtype: float64
***************
name
Joseph [(1880, [0.022229, 0.000102]), (1881, [0.02267...
Nancy [(1880, [0.004211]), (1881, [0.004339]), (1882...
dtype: object
接下来,我让他们添加这两个值,但我仍然有一个格式错误。
arr=列表(结果['Joseph'])
非常感谢您提供的任何帮助建议。我猜您正在使用人口普查婴儿姓名数据集?你用的那个?在将来,最好从您的数据集中包含一个样本,以便其他人可以复制您的工作 我刚刚将2006-2010读入一个数据框,如下所示
In [75]: df.head()
Out[75]:
name sex num year
0 Emily F 21365 2006
1 Emma F 19092 2006
2 Madison F 18599 2006
3 Isabella F 18200 2006
4 Ava F 16925 2006
如上文所述,在prop
中添加:
In [26]: df['prop'] = df.groupby('year')['num'].transform(lambda x: x / x.sum())
In [26]: df
Out[26]:
name sex num year prop
0 Emily F 21365 2006 0.005413
1 Emma F 19092 2006 0.004837
2 Madison F 18599 2006 0.004713
3 Isabella F 18200 2006 0.004611
4 Ava F 16925 2006 0.004288
5 Abigail F 15615 2006 0.003956
我建议采用另一种方法,按姓名和年份计算。我认为这将使策划更容易。与其制作两个数据帧(每个名称对应一个),不如同时制作
In [48]: df.query('name in ["Joeseph", "Nancy"]')
Out[48]:
name sex num year prop
323 Nancy F 1014 2006 0.000257
23206 Joeseph M 34 2006 0.000009
34401 Nancy F 896 2007 0.000225
57551 Joeseph M 39 2007 0.000010
69300 Nancy F 853 2008 0.000218
92066 Joeseph M 45 2008 0.000011
104394 Nancy F 663 2009 0.000174
127335 Joeseph M 34 2009 0.000009
139050 Nancy F 565 2010 0.000154
161863 Joeseph M 29 2010 0.000008
[10 rows x 5 columns]
在pandas.13之前,您可以使用df[df.name.isin(['Joeseph','Nancy'])]
由于您已经计算了prop
,因此我们不需要任何进一步的groupby
s(这比我之前的方法简单一些):
使用此方法,您不必担心对齐x值。这已经为你做了。由于索引中有重复的条目,我得到了一个错误。显然,Nancy过去是个男孩的名字,所以在某些年份(比如1889年)它会出现两次。您需要决定如何处理这些问题。我想添加它们。这就是我最初希望将所有值与相同的索引值组合的原因。好的。因此,一旦你有了
s=df.query('name in[“Joeseph”,“Nancy”]')。设置索引(['year”,“name'])['prop']
,做一个s=s.groupby(level='name').sum()
。那会给你你想要的。然后您可以s.unstack().plot()
In [26]: df['prop'] = df.groupby('year')['num'].transform(lambda x: x / x.sum())
In [26]: df
Out[26]:
name sex num year prop
0 Emily F 21365 2006 0.005413
1 Emma F 19092 2006 0.004837
2 Madison F 18599 2006 0.004713
3 Isabella F 18200 2006 0.004611
4 Ava F 16925 2006 0.004288
5 Abigail F 15615 2006 0.003956
In [48]: df.query('name in ["Joeseph", "Nancy"]')
Out[48]:
name sex num year prop
323 Nancy F 1014 2006 0.000257
23206 Joeseph M 34 2006 0.000009
34401 Nancy F 896 2007 0.000225
57551 Joeseph M 39 2007 0.000010
69300 Nancy F 853 2008 0.000218
92066 Joeseph M 45 2008 0.000011
104394 Nancy F 663 2009 0.000174
127335 Joeseph M 34 2009 0.000009
139050 Nancy F 565 2010 0.000154
161863 Joeseph M 29 2010 0.000008
[10 rows x 5 columns]
In [42]: s = df.query('name in ["Joeseph", "Nancy"]').set_index(['year', 'name'])['prop']
In [46]: ax = s.unstack().plot()