Возвращаемое значение из строки ниже при выполнении условия в pandas - PullRequest
1 голос
/ 03 августа 2020

Я новичок в Python и пытаюсь найти способ выбрать определенные «ячейки» из pandas DataFrame при соблюдении определенных условий. В качестве примера предположим, что у вас есть данные этого типа:

Number Country
1      Germany
2      Italy
0      Spain
0.5    Greece

Я хочу добавить еще один столбец со страной из строки ниже той, где выполняется условие. Если бы это было в Excel, предполагая, что «Число» - это ячейка A1, формула была бы такой: = if (A2> 0, B3, «»)

, поэтому ответ будет:

Number Country  New Column
1      Germany  Italy
2      Italy    Spain
0      Spain
0.5    Greece

как бы вы сделали это на pandas фрейме данных?

Я пытался сделать это, используя:

df["New Column"] = np.where(df["Number"] > 0.5, df["Country"], "")

, но это не дает страны, на одну строку ниже.

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Почти готово, просто shift индекс на требуемое / установленное количество точек в качестве результата True и np.nan или пробел " " для false в выражении np.where

df["New Column"] = np.where(df["Number"] > 0.5, df.Country.shift(-1)," ")
print(df)



   Number  Country New Column
0     1.0  Germany      Italy
1     2.0    Italy      Spain
2     0.0    Spain           
3     0.5   Greece
0 голосов
/ 03 августа 2020

Вы можете использовать shift(-1) для создания столбца со значениями из предыдущих строк

df['New Column'] = df['Country'].shift(-1)

и позже используйте правило, которое удаляет некоторые значения

df.loc[ df["Number"] <= 0.5, "New Column"] = ""

Минимальный рабочий код

text = '''Number Country
1      Germany
2      Italy
0      Spain
0.5    Greece'''

import pandas as pd
import io

df = pd.read_csv(io.StringIO(text), sep='\s+')

df['New Column'] = df['Country'].shift(-1)
print(df)

df.loc[ df["Number"] <= 0.5, "New Column"] = ""
print(df)

Результат

   Number  Country New Column
0     1.0  Germany      Italy
1     2.0    Italy      Spain
2     0.0    Spain     Greece
3     0.5   Greece        NaN

   Number  Country New Column
0     1.0  Germany      Italy
1     2.0    Italy      Spain
2     0.0    Spain           
3     0.5   Greece 
0 голосов
/ 03 августа 2020
import numpy as np
df["New Column"] = np.where(df.Number>0.5, df.Country.shift(-1),np.nan)
print(df["New Column"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...