Pandas 具有隐式层次结构的列的行值的字符串串联

Pandas string concatenation of row values of a column that have an implicit hierarchy

我有一个数据框表示印度不同地区三天的温度。如下图所示。 original_dataframe

我需要在同一数据框中生成另一列,该列连接 'Col5' 中显示的州和城市的字符串值,如下图所示。

output_dataframe

我知道基于列合并值。但是可以使用 pandas 或 python 中的 udf 来实现类似的东西吗?请求您的见解。

  1. 创建一个包含空值的新列,如果该行包含“/”(或您在日期格式中使用的任何其他字符),则用州名称填充新列。
  2. 然后用州名称向前填充新列,然后用列 1 中的城市名称填充新列。
  3. 最后,修复包含州名的行,只包含一次州名。

所以像这样:

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]

这是你的想法吗?

如果是我想的那样,做起来还是很容易的。我知道使用 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 - 使用应用

优点 - 容易做到

缺点 - 相对较慢(但如果你的数据集很小,我会汗流浃背)

df_data = pd.DataFrame(...) # your data here

df_data["Col5"] = df_data.apply(
  lambda row: row["Col1"] + row["Col2"] 
  axis=1
)