Получить только два значения из 4 указанных столбцов и объединить действительные значения в 2 столбца - PullRequest
0 голосов
/ 07 ноября 2018

ДФ:

index      a          b          c           d
-
0          1          2          NaN         NaN
1          2          NaN        3           NaN
2          5          NaN        6           NaN
3          1          NaN        NaN         5

df ожидайте:

index      one        two
-
0          1          2         
1          2          3     
2          5          6        
3          1          5

Приведенный выше пример не требует пояснений. По сути, мне просто нужно переместить два значения из столбцов [a, b, c, d], за исключением NaN, в другой набор из двух столбцов ["one", "two"] *

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Или combine_first + drop:

df['two']=df.pop('b').combine_first(df.pop('c')).combine_first(df.pop('d'))
df=df.drop(['b','c','d'],1)
df.columns=['index','one','two']

или fillna:

df['two']=df.pop('b').fillna(df.pop('c')).fillna(df.pop('d'))
df=df.drop(['b','c','d'],1)
df.columns=['index','one','two']

Оба случая:

print(df)

Является:

   index  one  two
0      0    1  2.0
1      1    2  3.0
2      2    5  6.0
3      3    1  5.0

Если хотите выводить как @ jezrael's, добавьте: (в обоих случаях все в порядке)

df=df.set_index('index')

А потом:

print(df)

Является:

       one  two
index          
0        1  2.0
1        2  3.0
2        5  6.0
3        1  5.0
0 голосов
/ 07 ноября 2018

Используйте заполнение пропущенных значений и выберите первые 2 столбца:

df = df.bfill(axis=1).iloc[:, :2].astype(int)
df.columns = ["one", "two"]
print (df)
       one  two
index          
0        1    2
1        2    3
2        5    6
3        1    5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...