Как создать условные столбцы в Pandas Data Frame, в которых значения столбцов основаны на других столбцах - PullRequest
1 голос
/ 10 июля 2019

Я новичок в python, я пытаюсь сделать то, что было бы условным изменением в R DPLYR. Короче говоря, я хотел бы создать новый столбец в фрейме данных с именем Result, где: если df.['test'] больше 1 df.['Result'] равно соответствующему df.['count'] для этой строки, если оно меньше 1, то df.['Result'] равно

df.['count'] *df.['test'] 

Я пытался df['Result']=df['test'].apply(lambda x: df['count'] if x >=1 else ...) К сожалению, это приводит к серии, я также пытался написать небольшие функции, которые также возвращают серии

Я бы хотел, чтобы окончательный Dataframe выглядел следующим образом ...

no_ Test Count  Result
1   2    1      1
2   3    5      5
3   4    1      1
4   6    2      2
5   0.5  2      1

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Вы можете использовать np.where:

df['Result'] = np.where(df['Test'] > 1, df['Count'], df['Count'] * df['Test'])

Выход:

   No_  Test  Count  Result
0    1   2.0      1     1.0
1    2   3.0      5     5.0
2    3   4.0      1     1.0
3    4   6.0      2     2.0
4    5   0.5      2     1.0
1 голос
/ 10 июля 2019

Вот способ сделать это:

import pandas as pd
df = pd.DataFrame(columns = ['Test', 'Count'], 
                  data={'Test':[2, 3, 4, 6, 0.5], 'Count':[1, 5, 1, 2, 2]})

df['Result'] = df['Count']
df.loc[df['Test'] < 1, 'Result'] = df['Test'] * df['Count']

Вывод:

       Test  Count  Result
0   2.0      1     1.0
1   3.0      5     5.0
2   4.0      1     1.0
3   6.0      2     2.0
4   0.5      2     1.0
0 голосов
/ 10 июля 2019

Вы можете решить это с помощью списков:

df['Result'] = [ df['count'][i] if df['test'][i]>1 else 
                 df['count'][i] * df['test'][i] 
                 for i in range(df.shape[0]) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...