Заменить некоторые значения строкой в ​​столбце в python - PullRequest
2 голосов
/ 10 февраля 2020

У меня есть столбец «Страна» во фрейме данных, я хотел бы сгруппировать столбец «Страна» только с двумя опциями: «Материковый Китай» и «Другие». Я пробовал разные варианты, например, фильтр, et c. Никто не работает. как мне это сделать?

Вот набор данных https://drive.google.com/file/d/17DY8f-Jxba0Ky5iOUQqEZehhoWNO3vzR/view?usp=sharing

К вашему сведению, я уже сгруппировал различные провинции в Китае как одну страну "Материковый Китай"

Спасибо за Ваша помощь!

enter image description here

Ответы [ 4 ]

3 голосов
/ 10 февраля 2020

Я думаю, что самым быстрым способом изменить значение было бы использование .loc вместо apply, поскольку .loc оптимизировано для pandas.

df.loc[df.Country != 'Mainland China', 'Country'] = 'Others'
1 голос
/ 10 февраля 2020

Попробуйте (и сгруппируйте по Country):

import numpy as np

df["Country"]=np.where(df["Country"].eq("Mainland China"), "Mainland China", "Other")

Редактировать

timeit (обратите внимание, что я не сделал .loc[] как lambda doesn't support assignment - не стесняйтесь предложить способ его добавления):

import pandas as pd
import numpy as np
import timeit
from timeit import Timer

#proportion-wise that's the dataframe, as per OP's question

df=pd.DataFrame({"Country": ["Mainland China"]*398+["a", "b","c"]*124})

df["otherCol"]=2
df["otherCol2"]=3

#shuffle

df2=df.copy().sample(frac=1)
df3=df2.copy()
df4=df3.copy()

op2=Timer(lambda: np.where(df2["Country"].eq("Mainland China"), "Mainland China", "Other"))
op3=Timer(lambda: df3.Country.map(lambda x: x if x == 'Mainland China' else 'Others'))
op4=Timer(lambda: df4["Country"].apply(lambda x: x if x == "Mainland China" else "Others"))

print(op2.timeit(number=1000))
print(op3.timeit(number=1000))
print(op4.timeit(number=1000))

Возвращает:

2.1856687490362674 #numpy
2.2388894270407036 #map
2.4437739049317315 #apply
0 голосов
/ 10 февраля 2020

Предполагая, что df - ваш pandas кадр данных.

Вы можете сделать:

df['Country'] = df.Country.map(lambda x: x if x == 'Mainland China' else 'Others')
0 голосов
/ 10 февраля 2020

Попробуйте использовать apply:

dataframe["Country"] = dataframe["Country"].apply(lambda x: x if x == "Mainland China" else "Others")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...