более быстрое добавление значений суммы к кадру данных с использованием итератора в качестве столбца и индекса - PullRequest
0 голосов
/ 19 сентября 2019

Мне был нужен самый быстрый и чистый способ написания кода для добавления моих значений суммирования к новому пустому фрейму данных.

Я пытался использовать .sum () и sum (), а также серии панд иприменять().

Но я хотел бы подтвердить, что у меня есть оптимальный подход к написанию самого чистого и быстрого кода здесь.Я бы предпочел самый быстрый, если оба не могут быть достигнуты одновременно.

Очиститель, означающий очень читаемый или многократно используемый код.Это грязный код для меня.Это работает, как я хочу, но я хочу, чтобы решение было быстрее, чем это.

df_year = pd.DataFrame()
for i in range(1960,2018,1):    
    df_year[str(i)] = pd.Series(sum(df_indicator[str(i)]))

Пример данных для всех трех стран выглядит следующим образом:

df_indicator

    Country Name    Country Code    Indicator Name  Indicator Code  1960    1961    1962    1963    1964    1965    1966    1967
33  Canada  CAN Population, total   SP.POP.TOTL 17909009.0  18271000.0  18614000.0  18964000.0  19325000.0  19678000.0  20048000.0  20412000.0
152 Mexico  MEX Population, total   SP.POP.TOTL 38174112.0  39394126.0  40649588.0  41939880.0  43264272.0  44623043.0  46011038.0  47429812.0
249 United States   USA Population, total   SP.POP.TOTL 180671000.0 183691000.0 186538000.0 189242000.0 191889000.0 194303000.0 196560000.0 198712000.0 

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, это то, что вы пытаетесь сделать:

In [1]: from pandas import DataFrame

In [2]: df = DataFrame({'Country': ['US', 'Canada', 'Mexico', 'Belize'], '1960': range(4), '1961': range(10, 14)})

In [3]: df
Out[3]:
  Country  1960  1961
0      US     0    10
1  Canada     1    11
2  Mexico     2    12
3  Belize     3    13

In [4]: res = df[df['Country'].isin(['US', 'Canada'])].sum()

In [5]: res
Out[5]:
Country    USCanada
1960              1
1961             21
dtype: object

Очевидно, что вы можете манипулировать полученными сериями в соответствии со своими потребностями:

In [6]: df_year = DataFrame(df[df['Country'].isin(['US', 'Canada'])].sum()).transpose().drop(['Country'], inplace=True, axis=1)

In [7]: df_year.drop(['Country'], inplace=True, axis=1)

In [8]: df_year
Out[8]:
  1960 1961
0    1   21

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...