Как добавить значения в новый столбец в соответствии с условиями? - PullRequest
0 голосов
/ 20 мая 2019

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

Я пробовал некоторые подходы, и это наиболее близко к тому, что я делал.

import pandas as pd

data = {'Date' : ['3-Mar', '20-Mar', '20-Apr', '21-Apr', '29-Apr', '7- 
         May', '30-May', '31-May', '7-Jun', '16-Jun',
        '1-Jul', '2-Jul', '10-Jul'],
        'Value' : [0.5840, 0.8159, 0.7789, 0.7665, 0.8510, 0.7428, 0.7124, 
        0.6820, 0.8714, 0.8902, 0.8596, 0.8289, 0.6877],}
frame = pd.DataFrame(data)

for counter, value in enumerate(frame['Value']):
    if value >= 0.7:
        frame = frame.append({'result': 'High'}, ignore_index=True)   
    else:
        frame = frame.append({'result': 'Low'}, ignore_index=True)   

print(frame)

Результат:

     Date   Value result
0    3-Mar  0.5840    NaN
1   20-Mar  0.8159    NaN
2   20-Apr  0.7789    NaN
3   21-Apr  0.7665    NaN
4   29-Apr  0.8510    NaN
5    7-May  0.7428    NaN
6   30-May  0.7124    NaN
7   31-May  0.6820    NaN
8    7-Jun  0.8714    NaN
9   16-Jun  0.8902    NaN
10   1-Jul  0.8596    NaN
11   2-Jul  0.8289    NaN
12  10-Jul  0.6877    NaN
13     NaN     NaN    Low
14     NaN     NaN   High
15     NaN     NaN   High
16     NaN     NaN   High
17     NaN     NaN   High
18     NaN     NaN   High
19     NaN     NaN   High
20     NaN     NaN    Low
21     NaN     NaN   High
22     NaN     NaN   High
23     NaN     NaN   High
24     NaN     NaN   High
25     NaN     NaN    Low

Однако я ожидаю, что значения будут размещены рядом с существующими, а не новыми.

Спасибо!

Ответы [ 3 ]

1 голос
/ 20 мая 2019

Если вы посмотрите документацию по функции добавления, то увидите, что она добавляет строки в конец информационного кадра, что не соответствует вашим ожиданиям:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html

Вы можете добиться этого с помощью лямбда-функции, которая, по сути, выполняет итерацию по каждой строке, применяя любую логику, какую пожелаете.

frame['result'] = frame['Value'].apply(lambda x: 'High' if x > .7 else "Low")
0 голосов
/ 20 мая 2019

Использование pandas.Series может решить вашу проблему

import pandas as pd

data = {'Date' : ['3-Mar', '20-Mar', '20-Apr', '21-Apr', '29-Apr', '7- May', 
                  '30-May', '31-May', '7-Jun', '16-Jun','1-Jul', '2-Jul', '10-Jul'],
        'Value' : [0.5840, 0.8159, 0.7789, 0.7665, 0.8510, 0.7428, 0.7124, 
                   0.6820, 0.8714, 0.8902, 0.8596, 0.8289, 0.6877]}
frame = pd.DataFrame(data)
frame['result'] = pd.Series(['High' if x >= 0.7 else 'Low' for x in frame['Value']])

Выход:

Date    Value   result
0   3-Mar   0.5840  Low
1   20-Mar  0.8159  High
2   20-Apr  0.7789  High
3   21-Apr  0.7665  High
4   29-Apr  0.8510  High
5   7- May  0.7428  High
6   30-May  0.7124  High
7   31-May  0.6820  Low
8   7-Jun   0.8714  High
9   16-Jun  0.8902  High
10  1-Jul   0.8596  High
11  2-Jul   0.8289  High
12  10-Jul  0.6877  Low
0 голосов
/ 20 мая 2019

Если я хорошо понимаю, это, вероятно, уже ответил, но здесь вы идете

вам нужно создать новый столбец result

определяет функцию (для удобства чтения), которая принимает значение и возвращает результат

def udf(value):
    if value >= .7:
        return "High"
    else
        return "Low"

затем примените эту функцию к значению столбца

frame['result'] = frame['Value'].apply(udf)

Предлагаю вам прочитать документ DataFrame.apply

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...