在python中使用全等x值打印

在python中使用全等x值打印,python,matplotlib,pandas,Python,Matplotlib,Pandas,目标:在同一个图表上获得两个不同的名称。确保年复一年。注意,不是文件有两个年份(当女孩和男孩都有名字时),在这种情况下,为每个名字添加所有拆分年份的值 当前状态:一个名称正在工作。两个名称将索引更改为行号,而不是年份号 Y:‘prop’==该姓名(不论性别)占当年新生儿所有姓名的比例 X:‘年份’==出生证明的年份 有csv吗 代码: 谢谢大家 这些图表并不一致,因为多年来,女孩的名字叫“约瑟夫”,男孩的名字叫“南希” ====================================

目标:在同一个图表上获得两个不同的名称。确保年复一年。注意,不是文件有两个年份(当女孩和男孩都有名字时),在这种情况下,为每个名字添加所有拆分年份的值

当前状态:一个名称正在工作。两个名称将索引更改为行号,而不是年份号

Y:‘prop’==该姓名(不论性别)占当年新生儿所有姓名的比例

X:‘年份’==出生证明的年份

有csv吗

代码:

谢谢大家

这些图表并不一致,因为多年来,女孩的名字叫“约瑟夫”,男孩的名字叫“南希”

=======================================================2/13/2014

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()