繁体   English   中英

如何以 python 中的其他两列为条件创建一个新列?

[英]How to create a new columns conditional on two other columns in python?

我想以 python 中的其他两列为条件创建一个新列。

下面是 dataframe:

姓名 地址
苹果 你好1234
香蕉 快乐111
苹果 str3333
馅饼 日记5144

我想创建一个新列“想要”,以列“名称”和“列”地址为条件。 规则如下: (1)如果“name”中的值为apple,“want”中的值应为“address”列的前五个字母。 (2)如果“name”中的值是banana,“want”中的值应该是“address”列的前四个字母。 (3)如果“name”中的值是pie,“want”中的值应该是“address”列的前三个字母。

我想要的 dataframe 看起来像这样:

姓名 地址
苹果 你好1234 你好
香蕉 快乐111 幸福
苹果 str3333 str33
馅饼 日记5144 直径

如何解决这样的问题? 谢谢!

我希望你一切都好,

import pandas as pd

# Initialize data of lists.
data = {'Name': ['Apple', 'Banana', 'Apple', 'Pie'],
        'Address': ['hello1234', 'happy111', 'str3333', 'diary5144']}

# Create DataFrame
df = pd.DataFrame(data)

# Add an empty column
df['Want'] = ''

for i in range(len(df)):
    if df['Name'].iloc[i] == "Apple":
        df['Want'].iloc[i] = df['Address'].iloc[i][:5]
    if df['Name'].iloc[i] == "Banana":
        df['Want'].iloc[i] = df['Address'].iloc[i][:4]
    if df['Name'].iloc[i] == "Pie":
        df['Want'].iloc[i] = df['Address'].iloc[i][:3]

# Print the Dataframe
print(df)

在此处输入图像描述

我希望它有帮助,

祝你有个愉快的一天

我认为更广泛的方法是创建一个条件 map 字典并将其与 lambda 函数一起应用于您的数据集。

创建数据集:

import pandas as pd

data = {
  'name': ['apple', 'banana', 'apple', 'pie'],
  'address': ['hello1234', 'happy111', 'str3333', 'diary5144']
}

df = pd.DataFrame(data)

定义条件字典:

conditionalMap = {
    'apple': lambda s: s[:5],
    'banana': lambda s: s[:4],
    'pie': lambda s: s[:3]
}

应用 map:

df.loc[:, 'want'] = df.apply(lambda row: conditionalMap[row['name']](row['address']), axis=1)

使用结果df:

姓名 地址
0 苹果 你好1234 你好
1 香蕉 快乐111 幸福
2 苹果 str3333 str33
3 馅饼 日记5144 直径

您可以执行以下操作:

for string, length in {"apple": 5, "banana": 4, "pie": 3}.items():
    mask = df["name"].eq(string)
    df.loc[mask, "want"] = df.loc[mask, "address"].str[:length]
  • 遍历 3 个条件: string是长度要求所依赖的字符串,长度要求存储在length中。
  • 通过df["name"].eq(string)构建一个mask ,它选择列name中具有值string的行。
  • 然后将这些行的列want设置为适当裁剪的列address值。

样品 dataframe 的结果:

     name    address   want
0   apple  hello1234  hello
1  banana   happy111   happ
2   apple    str3333  str33
3     pie  diary5144    dia

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM