Python 在其他人的值上创建新的列条件,并使用这些值



我有一个问题,我想根据其他列的值创建一个新列,然后获取另一列的值。

DF:

Type       Set     Count
1    A          Z        5
2    B          Z        9   
3    B          X        8
4    C          Y        2

我发现了一个类似的解决方案,其中在代码中分配了新的列值(颜色)

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
conditions = [
(df['Set'] == 'Z') & (df['Type'] == 'A'),
(df['Set'] == 'Z') & (df['Type'] == 'B'),
(df['Type'] == 'B')]
choices = ['yellow', 'blue', 'purple']
df['color'] = np.select(conditions, choices, default='black')
print(df)

但是,我希望新列根据这些规则获取Count列的值,而不是颜色列,B&Z=计数值,其他所有内容=0;结果如下所示:

Type       Set     Count    New
1    A          Z        5       5
2    B          Z        9       9
3    B          X        8       0
4    C          Y        2       0

somone 可以帮助代码将颜色部分替换为另一列的值吗?

谢谢。

我建议也改变条件以获得更友好的东西。 你可以这样做:

df = pd.DataFrame({
'Type': ['A', 'B', 'B', 'C'],
'Set': ['Z', 'Z', 'X', 'Y'],
'Count': [5, 9, 8, 2]
})
conditions = ((df['Type'].isin(['A', 'B'])) & (df['Set'] == 'Z'))
df['New'] = 0  # or df.loc[~conditions, 'New'] = 0
df.loc[conditions, 'New'] = df['Count']
Type       Set     Count    New
1    A          Z        5       5
2    B          Z        9       9
3    B          X        8       0
4    C          Y        2       0

与@ErnestBidouille类似,您可以复制Count列的值并使用否定将行替换为 0。

df['New'] = df.Count
condition = ~(df.Type.isin(['A','B']) & df.Set.isin(['Z']))
df.loc[condition, 'new'] = 0

最新更新