2017-09-28 16 views
1

私はCSVデータセットをインポートしましたが、データの再構築に問題があります。データは次のようになります。これは、データの数が異なる複数の領域のために働く必要が列に複数の行名をパンダ

area 1 2 3 4 
UK  a b c d 
UK  b d c a 
.  . . . . 
US  a b c d 

1 2 3 4 
UK NaN NaN NaN 
a b c d 
b d c a 
. . . . 
US NaN NaN NaN 
a b c d 
. . . . 

私のような値として、英国、米国などとの新しい列を追加したいと思いますの間に。

ありがとうございます。位置によって新しいcolumため

+0

一つの方法だあなたは '必要です最初の列として「エリア」?最後かどうかは関係ありませんか? – jezrael

答えて

2

使用insert

print (df[1].where(df[2].isnull()).ffill()) 
0 UK 
1 UK 
2 UK 
3 US 
4 US 
Name: 1, dtype: object 

df.insert(0, 'area', df[1].where(df[2].isnull()).ffill()) 
#alternative 
#df.insert(0, 'area', df[1].mask(df[2].notnull()).ffill()) 
df = df[df[1] != df['area']].reset_index(drop=True) 
print (df) 
    area 1 2 3 4 
0 UK a b c d 
1 UK b d c a 
2 US a b c d 

チェックのための別の解決策最初の列なしですべてのNaN S:

print (df[1].where(df.iloc[:, 1:].isnull().all(1)).ffill()) 
0 UK 
1 UK 
2 UK 
3 US 
4 US 
Name: 1, dtype: object 
3

ここ

In [4461]: nn = df['2'].notnull() 

In [4462]: df[nn].assign(area=df['1'].mask(nn).ffill()) 
Out[4462]: 
    1 2 3 4 area 
1 a b c d UK 
2 b d c a UK 
4 a b c d US 
+0

列の順序が間違っています – jezrael

+0

注文が問題になる場合は、 'df.insert(0、blah blah blah)'を使用してください。 –

+1

OPの注文を求められません。 – Zero

関連する問題