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

Я пытаюсь что-то решить на Пандах, но я не уверен, с чего начать.

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

df = pd.DataFrame(data = {'subject': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'val': [np.nan, 2, np.nan, np.nan, np.nan, 7, np.nan, np.nan, 10]})

    subject    val
0        1     NaN
1        1     2.0
2        1     NaN
3        2     NaN
4        2     NaN
5        2     7.0
6        3     NaN
7        3     NaN
8        3    10.0

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

   subject    val  total
0        1     NaN   2
1        1     2.0   2
2        1     NaN   2
3        2     NaN   7
4        2     NaN   7
5        2     7.0   7
6        3     NaN  10
7        3     NaN  10
8        3    10.0  10

Я знаю, что могу сделать

df[['subject', 'val']].dropna()

, чтобы получить значения для третьего столбца, но при этом будут потеряны все остальные столбцы в кадре данных (который имеет разные значения в каждой строке).

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Используя ffill и bfill

df['New']=df.groupby('subject').val.apply(lambda x : x.ffill().bfill())
df
Out[257]: 
   subject   val   New
0        1   NaN   2.0
1        1   2.0   2.0
2        1   NaN   2.0
3        2   NaN   7.0
4        2   NaN   7.0
5        2   7.0   7.0
6        3   NaN  10.0
7        3   NaN  10.0
8        3  10.0  10.0
0 голосов
/ 29 мая 2018

попробуйте это,

df['total'] =df.groupby('subject')['val'].transform('sum')

или

df['total2'] =df.groupby('subject')['val'].transform(lambda x:x[x.notnull()].unique()) #this will remove NaN records and give you unique element in each group

Вывод:

   subject   val  total  total2
0        1   NaN    2.0     2.0
1        1   2.0    2.0     2.0
2        1   NaN    2.0     2.0
3        2   NaN    7.0     7.0
4        2   NaN    7.0     7.0
5        2   7.0    7.0     7.0
6        3   NaN   10.0    10.0
7        3   NaN   10.0    10.0
8        3  10.0   10.0    10.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...