Как переместить значения двух столбцов с (некоторыми) одинаковыми значениями в новый столбец - PullRequest
0 голосов
/ 27 октября 2018

У меня есть фрейм данных, который выглядит следующим образом:

import pandas as pd
import numpy as np

df = pd.DataFrame({"Amount1": [100, 100, 100, 200, 250, 280, 300, 350, 370, np.NaN, np.NaN, np.NaN], 
                   "Amount2": [100, 100, 100, np.NaN, np.NaN, np.NaN, 300, 350, 370, 500, 510, 540]})

Я хочу переместить значения в новый столбец, принимая действительные значения там, где они присутствуют, и просто сдвигая одно из значений, когда присутствуют оба значения,Я имею в виду отображение lambda x, но я когда-либо использовал его только в одном столбце.Я пробовал следующий код:

df['Amount1', 'Amount2'].map(lambda x: x if x in 'Amount1' or 'Amount2' else np.NaN)

Это мой ожидаемый результат:

df2 = pd.DataFrame({"Amount3": [100, 100, 100, 200, 250, 280, 300, 350, 370, 500, 510, 540]})

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вот другой способ, без использования apply, но с использованием pd.np.nanmax:

df2 = pd.DataFrame(pd.np.nanmax(df.values.astype(int),axis=1),columns=['Amount3'])

>>> df2
    Amount3
0       100
1       100
2       100
3       200
4       250
5       280
6       300
7       350
8       370
9       500
10      510
11      540

Или, альтернативно, с pd.np.partition:

df2 = pd.DataFrame(pd.np.partition(df.values,1)[:,0],columns=['Amount3']).astype(int)

>>> df2
    Amount3
0       100
1       100
2       100
3       200
4       250
5       280
6       300
7       350
8       370
9       500
10      510
11      540
0 голосов
/ 27 октября 2018

Вы можете использовать применить :

import pandas as pd
import numpy as np

df = pd.DataFrame({"Amount1": [100, 100, 100, 200, 250, 280, 300, 350, 370, np.NaN, np.NaN, np.NaN],
                   "Amount2": [100, 100, 100, np.NaN, np.NaN, np.NaN, 300, 350, 370, 500, 510, 540]})


def shift(row):
    return row['Amount1'] if not np.isnan(row['Amount1']) else row['Amount2']


df2 = df[['Amount1', 'Amount2']].apply(shift, axis=1)
print(df2)

выход

0     100.0
1     100.0
2     100.0
3     200.0
4     250.0
5     280.0
6     300.0
7     350.0
8     370.0
9     500.0
10    510.0
11    540.0
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...