Pandas 具有隐式层次结构的列的行值的字符串串联
Pandas string concatenation of row values of a column that have an implicit hierarchy
我有一个数据框表示印度不同地区三天的温度。如下图所示。
original_dataframe
我需要在同一数据框中生成另一列,该列连接 'Col5' 中显示的州和城市的字符串值,如下图所示。
output_dataframe
我知道基于列合并值。但是可以使用 pandas 或 python 中的 udf 来实现类似的东西吗?请求您的见解。
- 创建一个包含空值的新列,如果该行包含“/”(或您在日期格式中使用的任何其他字符),则用州名称填充新列。
- 然后用州名称向前填充新列,然后用列 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]
这是你的想法吗?
如果是我想的那样,做起来还是很容易的。我知道使用 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
)
我有一个数据框表示印度不同地区三天的温度。如下图所示。 original_dataframe
我需要在同一数据框中生成另一列,该列连接 'Col5' 中显示的州和城市的字符串值,如下图所示。
output_dataframe
我知道基于列合并值。但是可以使用 pandas 或 python 中的 udf 来实现类似的东西吗?请求您的见解。
- 创建一个包含空值的新列,如果该行包含“/”(或您在日期格式中使用的任何其他字符),则用州名称填充新列。
- 然后用州名称向前填充新列,然后用列 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]
这是你的想法吗?
如果是我想的那样,做起来还是很容易的。我知道使用 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
)