2016-06-16 3 views
2

同じ値を持つ類似の列を持つデータフレームが与えられているとします。他の列名の名前を明示的に記述することなく、他の列のNULL以外の値を持つ列のNULLを動的に埋め込む方法最初の列category1を選択し、同じ行の他の列からの値でヌル行を埋めますか? category1を充填した後他の列のNULL以外の値を持つ列のNULLを入力します。

data = {'year': [2010, 2011, 2012, 2013, 2014, 2015, 2016,2017, 2018, 2019], 
     'category1': [None, 21, None, 10, None, 30, 31,45, 23, 56], 
     'category2': [10, 21, 20, 10, None, 30, None,45, 23, 56], 
     'category3': [10, 21, 20, 10, None, 30, 31,45, 23, 56],} 


df = pd.DataFrame(data) 
df = df.set_index('year') 
df 

    category1 category2 category3 
year    
2010 NaN 10 10 
2011 21 21 21 
2012 NaN 20 20 
2013 10 10 10 
2014 NaN NaN NaN 
2015 30 30 NaN 
2016 31 NaN 31 
2017 45 45 45 
2018 23 23 23 
2019 56 56 56 

category1 category2 category3 
year    
2010 10 10 10 
2011 21 21 21 
2012 20 20 20 
2013 10 10 10 
2014 NaN NaN NaN 
2015 30 30 NaN 
2016 31 NaN 31 
2017 45 45 45 
2018 23 23 23 
2019 56 56 56 

答えて

0

すべての値がNaNている場合は、条件とfirst_valid_indexを使用することができます。

def f(x): 
    if x.first_valid_index() is None: 
     return None 
    else: 
     return x[x.first_valid_index()] 

df['a'] = df.apply(f, axis=1) 

print (df) 
     category1 category2 category3  a 
year          
2010  NaN  10.0  10.0 10.0 
2011  21.0  21.0  21.0 21.0 
2012  NaN  20.0  20.0 20.0 
2013  10.0  10.0  10.0 10.0 
2014  NaN  NaN  NaN NaN 
2015  30.0  30.0  30.0 30.0 
2016  31.0  NaN  31.0 31.0 
2017  45.0  45.0  45.0 45.0 
2018  23.0  23.0  23.0 23.0 
2019  56.0  56.0  56.0 56.0 
+0

に感謝@jezrael、私は質問を更新しました。他の列を明示的に記述することなく他の列を動的に埋めることを意味しました – ArchieTiger

+0

私は答えを編集しますので、それを確認してください。 – jezrael

+0

それは働いて、ありがとう! – ArchieTiger

1

IIUCあなたはこのようにそれを行うことができます。

In [369]: df['category1'] = df['category1'].fillna(df['category2']) 

In [370]: df 
Out[370]: 
     category1 category2 category3 
year 
2010  10.0  10.0  10.0 
2011  21.0  21.0  21.0 
2012  20.0  20.0  20.0 
2013  10.0  10.0  10.0 
2014  NaN  NaN  NaN 
2015  30.0  30.0  30.0 
2016  31.0  NaN  31.0 
2017  45.0  45.0  45.0 
2018  23.0  23.0  23.0 
2019  56.0  56.0  56.0 
+0

を? – ArchieTiger

+0

@ user1128088、私はそれを手に入れません、あなたは例を挙げることができますか? – MaxU

+0

..「category2」にハードコーディングすることなく – ArchieTiger

0

これ試してみてください。他の列名が不明なことができるように、動的に記入する方法

df['category1']= df['category1'].fillna(df.median(axis=1)) 
関連する問題