#python #pandas #dataframe #row #string-concatenation
#python #pandas #фрейм данных #строка #строка-конкатенация
Вопрос:
У меня есть фрейм данных, обозначающий температуру за три дня для разных регионов Индии. Это показано на следующем изображении. original_dataframe
Мне нужно сгенерировать еще один столбец в том же фрейме данных, который объединяет строковые значения штата и города, которые видны в «Col5», как показано на рисунке ниже.
Я знаю о слиянии значений на основе столбцов. Но может ли что-то подобное быть достигнуто с помощью pandas или udf в python. Запросите ваши идеи.
Ответ №1:
- Создайте новый столбец с нулевыми значениями, заполните новый столбец именем состояния, если строка содержит «/» (или любой другой символ, который вы используете в своем формате даты).
- Затем вперед заполните новый столбец именами штатов, а затем заполните новый столбец названиями городов из Col 1.
- Наконец, исправьте строки, содержащие имя состояния, включив имя состояния только один раз.
Итак, что-то вроде этого:
import pandas as pd
import numpy as np
df["Col 5"] = np.nan
df.loc[df['Col 2'].str.contains("/").fillna(False), "Col 5"] = df["Col 1"]
df["Col 5"] = df["Col 5"].ffill() "|" df['Col 1']
df.loc[df["Col 5"].str.split("|").str[0] == df["Col 5"].str.split("|").str[1], "Col 5"] = df["Col 5"].str.split("|").str[0]
Это то, что вы имели в виду?
Ответ №2:
Если это то, что я думаю, это довольно легко сделать. Есть несколько возможных вариантов, о которых я знаю, используя pandas
Вариант 1
df_data = pd.DataFrame(...) # your data here
df_data["Col5"] = df_data["State"] df_data["City"]
# or
df_data = (
pd.DataFrame(...)
.assign(
Col5=lambda df: df["State"] df["City"]
)
)
Вариант 2 — использование apply
плюсы — легко сделать
минусы — относительно медленно (но если ваш набор данных невелик, я бы сильно попотел)
df_data = pd.DataFrame(...) # your data here
df_data["Col5"] = df_data.apply(
lambda row: row["Col1"] row["Col2"]
axis=1
)