2016-11-25 29 views
2
target_value  title people  start end twitter_map 
0 AGE_13_TO_17  13 to 17  1  13 17 AGE_13_TO_17 
1 AGE_13_TO_24  13 to 24  NaN  13 24   NaN 
2 AGE_13_TO_34  13 to 34  NaN  13 34   NaN 
3 AGE_13_TO_49  13 to 49  NaN  13 49   NaN 
4 AGE_13_TO_54  13 to 54  NaN  13 54   NaN 
5 AGE_OVER_13  Age Over 13 NaN  13 -   NaN 
6 AGE_18_TO_24  18 to 24  7  18 24 AGE_18_TO_24 
7 AGE_18_TO_54  18 to 54  NaN  18 54   NaN 
8 AGE_OVER_18  Age Over 18 NaN  18 -   NaN 
9 AGE_21_TO_34  21 to 34  NaN  21 34   NaN 
10 AGE_21_TO_49  21 to 49  NaN  21 49   NaN 
11 AGE_21_TO_54  21 to 54  NaN  21 54   NaN 
12 AGE_25_TO_34  25 to 34  34  25 34 AGE_25_TO_34 
13 AGE_25_TO_49  25 to 49  NaN  25 49   NaN 
14 AGE_OVER_25 Age Over 25 NaN  25 -   NaN 
15 AGE_35_TO_44  35 to 44  15  35 44 AGE_35_TO_44 
16 AGE_OVER_35 Age Over 35 NaN  35 -   NaN 
17 AGE_45_TO_54  45 to 54  1  45 54 AGE_45_TO_54 
18 AGE_OVER_50 Age Over 50 NaN  50 -   NaN 
19 AGE_55_TO_64  55 to 64  3  55 64 AGE_55_TO_64 
20 AGE_OVER_65   65+  6  65 - AGE_OVER_65 
21   None  All Ages NaN All Ages -   NaN 

このように、このデータフレームには、年齢の開始時と年齢の終了時の値が表示されています。しかし、いくつかの重複するバケットがあります。私は正しく、私は簡単な例で動作しますPandas DataFrameで重複する年齢層の年齢の合計を取得する

最初の2行の予想出力

target_value  title people  start end twitter_map 
0 AGE_13_TO_17  13 to 17  1  13 17 AGE_13_TO_17 
1 AGE_13_TO_24  13 to 24  8  13 24   NaN 
+0

最初の3列には、最後の3つの列が予想出力が正確に何 –

+2

に参加してきましたか? –

+0

私は最初の2行にサンプルを与えました...私はそれが説明することを願って –

答えて

2

における既知の値に基づいて列を記入する必要があります。

people start end 
    1 13 17 
    NaN 13 24 
    NaN 13 34 
    NaN 13 - 
    7 18 24 
    NaN 18 - 
    34 25 34 

最初に-を無限に置き換え、すべてをfloatに変換します。

の各行について

def func(row): 
    return df_input.loc[ 
      (df_input['start'] >= row['start']) & (df_input['end'] <= row['end']), 
      'people' 
     ].sum() 

df_input = df.dropna() 

すぐ次の関数を定義する:

import numpy as np 
df = df.replace({'-': np.inf}).astype(float) 

そして「人」の数が与えられている行を選択し、これが入力されますデータフレームでは、年齢括弧を定義する条件を満たす入力内のすべての数値を合計します(これは無限大が有効な場合です)。

は最後に適用されます機能:

In [36]: df.apply(func, axis=1) 
Out[36]: 
0  1.0 
1  8.0 
2 42.0 
3 42.0 
4  7.0 
5 41.0 
6 34.0 
+0

ありがとう!一度私は速かった;) – IanS

+0

はい、私は話していることを知っている... – jezrael