如何根据数据框第一列和第二列的差异获取第三列的值?

3

所以,我有一个如下的表格:

开始 结束 5 5 4 8 10 19 4 4

现在我想做的是,如果特定行中两列的值相等,则只在第三列中打印其中之一。如果它们不同,则打印 - 开始 + "-" + 结束。数据在数据框中。例子如下:

开始 结束 范围 5 5 5 4 8 4-8 10 19 10-19 4 4 4

这是我正在尝试的代码:

if df['start'] - df['end'] != 0:
   df['range'] = df['start'] + "-" + df['end']
else:
   df['range'] = df['start']

但是这个不起作用。我该怎么做呢?

1个回答

1
使用 numpy.where
df['range'] = np.where(df['start'] != df['end'], df['start'] + "-" + df['end'], df['start'])

类似于另一个解决方案:
df['range'] = df['start'] + np.where(df['start'] != df['end'], "-" + df['end'], '')

print (df)
  start end  range
0     5   5      5
1     4   8    4-8
2    10  19  10-19
3     4   4      4

如果值不是字符串的解决方案:

s = df['start'].astype(str) 
e = df['end'].astype(str)

df['range'] = np.where(df['start'] != df['end'], s + "-" + e, s)

类似另一个解决方案:
df['range'] = s + np.where(df['start'] != df['end'], "-" + e, '')

你为什么分配了两次? - Sayantan Ghosh
@SayantanGhosh - 这是两个解决方案,选择你更喜欢的吧 ;) - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接