2017-12-06 2 views
0

우아한 방법이 있어야하지만 아직 찾지 못했습니다. 내가 이렇게 보이는 큰 dataframe 있습니다팬더를 사용하여 열의 고르지 않은 데이터를 녹이고 NaN을 무시하십시오.

df 
    Name 0   1   2  3  4 
1 apple 2016 W1  NaN   NaN  NaN NaN 
2 orange 2016 W1  2017 W2  NaN  NaN NaN 
3 banana 2016 W2  2017 W3  NaN  NaN NaN 
4 pear 2016 W3  2016 W4  2016 W5 NaN NaN 
6 melon 2016 W2  2016 W4  2017 W5 2017 W6 2017 W7 

을 그리고 난 단지 두 개의 열 nameweek가되도록 데이터를 녹여합니다. 따라서 결과는 다음과 같아야합니다.

df_result 

    Name week  
    apple 2016 W1  
    orange 2016 W1 
    orange 2017 W2  
    banana 2016 W2 
    banana 2017 W3 
    pear 2016 W3  
    pear 2016 W4  
    ... etc. 

나는 값을 잃지 않고 NaN 값을 무시하는 방법을 고집합니다.

나는 pd.melt(df, id_vars=['Name'])을 할 때 나는 결과가 내가 원하는 것인지 확신하지 못한다.

답변

2

OP1

df.melt('Name').dropna().drop('variable',1) 
Out[62]: 
     Name value 
0 apple 2016 W1 
1 orange 2016 W1 
2 banana 2016 W2 
3  pear 2016 W3 
4 melon 2016 W2 
6 orange 2017 W2 
7 banana 2017 W3 
8  pear 2016 W4 
9 melon 2016 W4 
13 pear 2016 W5 
14 melon 2017 W5 
19 melon 2017 W6 
24 melon 2017 W7 

OP2

df.set_index('Name').stack().reset_index().drop('level_1',1) 
Out[66]: 
     Name  0 
0 apple 2016 W1 
1 orange 2016 W1 
2 orange 2017 W2 
3 banana 2016 W2 
4 banana 2017 W3 
5  pear 2016 W3 
6  pear 2016 W4 
7  pear 2016 W5 
8 melon 2016 W2 
9 melon 2016 W4 
10 melon 2017 W5 
11 melon 2017 W6 
12 melon 2017 W7 
,691,363에 녹여 사용 (210)

OP3

pd.DataFrame({'Name':df.Name.tolist()*5,'Value':np.concatenate(df.iloc[:,1:].values)}).dropna() 
Out[69]: 
     Name Value 
0 apple 2016 W1 
5 apple 2016 W1 
6 orange 2017 W2 
10 apple 2016 W2 
11 orange 2017 W3 
15 apple 2016 W3 
16 orange 2016 W4 
17 banana 2016 W5 
20 apple 2016 W2 
21 orange 2016 W4 
22 banana 2017 W5 
23 pear 2017 W6 
24 melon 2017 W7 
+0

내가 BTW, OP1 JAG2024 YW ~의 :-) @ 최고의 – JAG2024

+1

같은 : 속도를 고려, OP3은 빨리해야한다 – Wen

1

스택

df.set_index('Name').stack().reset_index(1,drop = True) 

Name 
apple  2016 W1 
orange 2016 W1 
orange 2017 W2 
banana 2016 W2 
banana 2017 W3 
pear  2016 W3 
pear  2016 W4 
pear  2016 W5 
melon  2016 W2 
melon  2016 W4 
melon  2017 W5 
melon  2017 W6 
melon  2017 W7 
dtype: object 

에게 사용 또는 일부 청소

df.melt(id_vars='Name').sort_values('Name').dropna() 
관련 문제