Столбец Динамическое добавление Dataframe Python Pandas - PullRequest
0 голосов
/ 31 мая 2018

Мой фрейм данных ниже:

    Date        Country     GDP
0   2011  United States   345.0
1   2012  United States     0.0
2   2013  United States   457.0
3   2014  United States   577.0
4   2015  United States     0.0
5   2016  United States   657.0
6   2011             UK    35.0
7   2012             UK    64.0
8   2013             UK    54.0
9   2014             UK    67.0
10  2015             UK   687.0
11  2016             UK     0.0
12  2011          China    34.0
13  2012          China    54.0
14  2013          China   678.0
15  2014          China   355.0
16  2015          China  5678.0
17  2016          China   345.0

Я хочу подсчитать, каков процент ВВП одной страны среди всех трех стран каждый год.Я хотел бы добавить еще один столбец с именем parc в кадре данных:

Я реализовал следующий код:

import pandas as pd
countrylist=['United States','UK','China']
for country in countrylist:
    for year in range (2011,2016):      
        df['perc']=(df['GDP'][(df['Country']==country) & (df['Date']==year)]).astype(float)/df['GDP'][df['Date']==year].sum()
        print (df['perc'])

Мой вывод похож на

    0     0.833333
    1          NaN
    2          NaN
    3          NaN
    4          NaN
    5          NaN
    6          NaN
    7          NaN
    8          NaN
    9          NaN
    10         NaN
    11         NaN
    12         NaN
    13         NaN
    14         NaN
    15         NaN
    16         NaN
    17         NaN
    0     NaN
    1     0.0
    2     NaN
    3     NaN
    4     NaN
    5     NaN
    6     NaN
    7     NaN
    8     NaN
    9     NaN
    10    NaN
    11    NaN
    12    NaN
    13    NaN
    14    NaN
    15    NaN
    16    NaN
    17    NaN
0          NaN
1          NaN
2     0.384357
3          NaN
4          NaN
5          NaN
6          NaN
7          NaN
8          NaN
9          NaN
10         NaN
11         NaN
12         NaN
13         NaN
14         NaN
15         NaN
16         NaN
17         NaN

....

Я заметил, что мои предыдущие результаты исчезли при запуске нового цикла.Так что в конечном итоге у меня есть только последнее значение perc.Я должен предоставить некоторую информацию о положении, когда происходит df ['perc'], например:

df['perc'][([(df['Country']==country) & (df['Date']==year)])]=(df['GDP'][(df['Country']==country) & (df['Date']==year)]).astype(float)/df['GDP'][df['Date']==year].sum()

Но это не работает.Как я могу динамически вставить значение?

В идеале у меня должно быть:

    Date        Country     GDP    perc
0   2011  United States   345.0    0.81
1   2012  United States     0.0    0.0
2   2013  United States   457.0    0.23
3   2014  United States   577.0    xx
4   2015  United States     0.0    xx
5   2016  United States   657.0    xx
6   2011             UK    35.0    xx
7   2012             UK    64.0    xx
8   2013             UK    54.0    xx
9   2014             UK    67.0    xx
10  2015             UK   687.0    xx
11  2016             UK     0.0    xx
12  2011          China    34.0    xx
13  2012          China    54.0    xx
14  2013          China   678.0    xx
15  2014          China   355.0    xx
16  2015          China  5678.0    xx
17  2016          China   345.0    xx

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать transform sum здесь

df.GDP/df.groupby('Date').GDP.transform('sum')
Out[161]: 
0     0.833333
1     0.000000
2     0.384357
3     0.577578
4     0.000000
5     0.655689
6     0.084541
7     0.542373
8     0.045416
9     0.067067
10    0.107934
11    0.000000
12    0.082126
13    0.457627
14    0.570227
15    0.355355
16    0.892066
17    0.344311
Name: GDP, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...