私はこのようなパンダDataFrameを持っています:
city country city_population
0 New York USA 8300000
1 London UK 8900000
2 Paris France 2100000
3 Chicago USA 2700000
4 Manchester UK 510000
5 Marseille France 860000
country_population
国ごとにすべての都市の合計を計算して、新しい列を作成したいと思います。私が試してみました:
df['Country population'] = df['city_population'].sum().where(df['country'])
しかし、これは機能しません。問題についてアドバイスをいただけますか?
あなたが探しているように聞こえます groupby
import pandas as pd
data = {
'city': ['New York', 'London', 'Paris', 'Chicago', 'Manchester', 'Marseille'],
'country': ['USA', 'UK', 'France', 'USA', 'UK', 'France'],
'city_population': [8_300_000, 8_900_000, 2_100_000, 2_700_000, 510_000, 860_000]
}
df = pd.DataFrame.from_dict(data)
# group by country, access 'city_population' column, sum
pop = df.groupby('country')['city_population'].sum()
print(pop)
出力:
country
France 2960000
UK 9410000
USA 11000000
Name: city_population, dtype: int64
このシリーズをDataFrameに追加します。(ただし、情報が冗長に格納され、元のDataFrameの構造に実際には適合しないため、おそらくお勧めできません):
# add to existing df
pop.rename('country_population', inplace=True)
# how='left' to preserve original ordering of df
df = df.merge(pop, how='left', on='country')
print(df)
出力:
city country city_population country_population
0 New York USA 8300000 11000000
1 London UK 8900000 9410000
2 Paris France 2100000 2960000
3 Chicago USA 2700000 11000000
4 Manchester UK 510000 9410000
5 Marseille France 860000 2960000
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加