2016-11-18 4 views
0

次のデータフレームがあります。各データフレームには値のセットが含まれており、各インデックスは一度だけ使用されます。しかし、私は完全に満たされたデータフレームを取得したいと思います。これを行うためには、各列からXの値を選択する必要があります。ここで、Xは最小でない値(この場合は '1.0'列)の列の長さです。ユニークな列のnon-nan値を持つdfを返す方法Pandas DataFrame Python

>>> stat_df_iws 

iws_w   -2.0  -1.0  0.0  1.0 
0   0.363567  NaN  NaN  NaN 
1   0.183698  NaN  NaN  NaN 
2    NaN -0.337931  NaN  NaN 
3   -0.231770  NaN  NaN  NaN 
4    NaN 0.544836  NaN  NaN 
5    NaN -0.377620  NaN  NaN 
6    NaN  NaN -0.428396  NaN 
7    NaN  NaN -0.443317  NaN 
8    NaN -0.268033  NaN  NaN 
9    NaN 0.246714  NaN  NaN 
10    NaN  NaN -0.503887  NaN 
11    NaN  NaN  NaN -0.298935 
12    NaN -0.252775  NaN  NaN 
13    NaN -0.447757  NaN  NaN 
14   -0.650598  NaN  NaN  NaN 
15   -0.660542  NaN  NaN  NaN 
16    NaN -0.952041  NaN  NaN 
17   -0.667356  NaN  NaN  NaN 
18   -0.920873  NaN  NaN  NaN 
19    NaN -0.537657  NaN  NaN 
20    NaN  NaN -0.525121  NaN 
21    NaN  NaN  NaN -0.619755 
22    NaN -0.652138  NaN  NaN 
23    NaN -0.924181  NaN  NaN 
24    NaN -0.665720  NaN  NaN 
25    NaN  NaN -0.336841  NaN 
26   -0.428931  NaN  NaN  NaN 
27    NaN -0.348248  NaN  NaN 
28    NaN 0.781024  NaN  NaN 
29   0.110727  NaN  NaN  NaN 
...    ...  ...  ...  ... 

私は次のコードでこれを達成しましたが、これを解決する非常に非凡な方法ではありません。

def get_non_null_from_pivot(df): 
    lngth = min(list(len(col.dropna()) for ind, col in df.iteritems())) 
    df = pd.concat([df.loc[:,-2.0].dropna().head(lngth).reset_index(drop=True),\ 
        df.loc[:,-1.0].dropna().head(lngth).reset_index(drop=True),\ 
        df.loc[:,0.0].dropna().head(lngth).reset_index(drop=True),\ 
        df.loc[:,1.0].dropna().head(lngth).reset_index(drop=True)], \ 
        axis=1) 

私はより自動的に他のデータフレームのために、この手順を繰り返すことができるように、同じ目標を達成するための簡単な方法はありますか?好ましくはforループなしで、効率の理由から。

+0

私はあなたが列の関数を書いて、データフレーム全体に適用することができると思います。 – Rockbar

答えて

0

私は、列をループすることによって少し短くしました。それは完全に機能するようです。

def get_non_null_from_pivot_short(df): 
    lngth = min(list(len(col.dropna()) for ind, col in df.iteritems())) 
    df = pd.concat(list(df.loc[:,col].dropna().head(lngth).reset_index(drop=True) for col in df), \ 
        axis=1) 
    return df 
+1

が述べたように、apply関数 – Rockbar

関連する問題