我有一个问题,我想根据其他列的值创建一个新列,然后获取另一列的值。
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