
[英]Python add new column values based on multiple conditions in another dataframe
[英]How can I add a new column to a dataframe in Python based on whether a set of conditions are met in another column?
我想向现有数据框 df 添加一个新列“类型”:
Circuit Size
0 6026 Large
1 5011 Very Small
2 50 Small
3 9023 Very Small
4 85GA Very Small
5 90A Large
电路和大小数据类型都是对象。
如果该行的“Circuit”值是一个 4 位整数(无字母),我希望新列显示为:“1”。 如果该行的“Circuit”值包含字母表中的任何字母,我希望新列显示为:“2”。 如果该行的“Circuit”值是一个整数(无字母),但多于或少于 4 位数字,我希望新列显示为“3”。
所以结果将是:
Circuit Size Type
0 6026 Large 1
1 5011 Very Small 1
2 50 Small 3
3 9023 Very Small 1
4 85GA Very Small 2
5 90CO Large 2
我尝试了以下方法,但它不起作用。
condition_1 = (df5["Circuit"].isdigit()) & (df5["Circuit"] >= 1000) & (df5["Circuit"] <= 9999)
condition_2 = df5["Circuit"].str.contains('[a-zA-Z]').any()
condition_3 = (df5["Circuit"].isdigit()) & (df5["Circuit"] <= 9999)
conditions = [condition_1, condition_2, condition_3]
choices = [1,2,3]
df["Type"] = np.select(conditions, choices, default="")
我应该怎么做? 谢谢你的帮助!
由于文本和数字混合使用,您最好为每个元素应用一个函数,因为正常的比较操作不起作用。 (例如:你不能做"85GA" <= 9999
)
def calc_type(x):
if x.isdigit():
if 1000 <= int(x) <= 9999:
return 1
return 3
return 2
df['Type'] = df['Circuit'].apply(calc_type)
对于处理,这里唯一的问题是 df["Circuit"] 中的某些值是整数,有些是字符串。
更改为字符串后,您可以使用简单的单行来解决此问题:
df["Circuit"] = [str(x) for x in df["Circuit"]]
df["Type"] = [2 if any(char.isalpha() for char in circuit) else (1 if len(circuit) == 4 else 3) for circuit in df["Circuit"]]
不确定条件,但如何使用np.where
并最终组合结果:
a1 = np.where(((pd.to_numeric(df["Circuit"], errors="coerce")>=1000) & (pd.to_numeric(df["Circuit"], errors="coerce")<=9999)),1,0)
a2 = np.where(df["Circuit"].str.contains('[a-zA-Z]'), 2, 0)
a3 = np.where((pd.to_numeric(df["Circuit"], errors="coerce")<=1000), 3, 0)
df["Type"] = a1 + a2 + a3
这是一种使用isupper()
检查字母的方法。
l = df['Circuit'].str.len()
s = df['Circuit'].str.upper().str.isupper()
df.loc[s,'Type'] = 2
df.loc[(l.eq(4)) & (~s),'Type'] = 1
df.loc[(~l.eq(4)) & (~s),'Type'] = 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.