找到两个点的数据帧的manhatten总和

时间:2016-09-16 00:50:28

标签: python pandas numpy dataframe

考虑数据框df

df = pd.DataFrame(np.arange(25).reshape(5, 5), list('abcde'), list('ABCDE'))
df

enter image description here

和两点p0p1

p0 = ('a', 'B')
p1 = ('d', 'E')

我想找到从点p0p1的路径上所有元素的总和。
假设

  • p0始终位于左侧或同一列p1
  • p0始终位于p1
  • 之上或同一行
  • 路径应首先从p0转到p1

enter image description here

我期待值88

1 个答案:

答案 0 :(得分:3)

认为你可以总结第一列和整行。这将重新计算左下角的项目,因此您需要删除该项:

s1 = df.ix['a':'d', 'B'].sum()
s2 = df.ix['d', 'B':'E'].sum()
print s1 + s2 - df.ix['d', 'B']

或者,如果您愿意,可以这样做:

s2 = df.ix['d', 'B':'E'][1:].sum()
print s1 + s2

因为这将切掉本来会被重复计算的元素......

也许熊猫大师可以提出一种更有效或更聪明的方法 - 但这似乎工作正常。我已经欺骗了一点并对这些点进行了硬编码,但它应该很容易解开 - 只需替换:

    {li> p0[0] 'a' {li> p1[0] 'd' {li> p0[1] 'B' {li> p1[1] 'E'