![](/img/trans.png)
[英]Python: How to create a new dataframe conditional sum two columns?
[英]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]
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.