我需要跟踪命名列的每个位置。因此,如果第一列具有相同的名称k次,则其值为1 * k。最好在示例中显示:

df1 = pd.DataFrame({'name':['n1', 'n2', 'n3']})
df1['pos'] = df1.index + 1

df2 = pd.DataFrame({'name':['n1', 'n3', 'n4']})
df2['pos'] = df2.index + 1

print "df1:\n", df1, '\n'
print "df2:\n", df2, '\n'

# Hack
df3 = df1.merge(df2, on='name', how='outer')
df3 = df3.fillna(0)
print df3

# Sum the desired values
df3['pos'] = df3.pos_x + df3.pos_y
del df3['pos_x']
del df3['pos_y']

# Produce desired output
print "\nDesired Output:\n", df3


输出为:

df1:
  name  pos
0   n1    1
1   n2    2
2   n3    3

df2:
  name  pos
0   n1    1
1   n3    2
2   n4    3

  name  pos_x  pos_y
0   n1      1      1
1   n2      2      0
2   n3      3      2
3   n4      0      3

Desired Output:
  name  pos
0   n1    2
1   n2    2
2   n3    5
3   n4    3


df1df2中,pos列由索引构造。我并不挑剔,pos列可能与索引相同。

有人知道一种更紧凑的方法来获取每个名称的最终pos列中的计数吗?

我需要像这样总结一下要迭代计算的数十万个数据帧,其中pos列代表每个name的性能。

最佳答案

另一种选择是concat而不是合并:

In [11]: df4 = pd.concat([df1, df2])


然后,您可以对“名称”进行分组,然后将结果相加(pos):

In [12]: g = df4.groupby('name', as_index=False)

In [13]: g.sum()
Out[13]:
  name  pos
0   n1    2
1   n2    2
2   n3    5
3   n4    3

关于python - Pandas Dataframe-根据索引位置计数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19148555/

10-16 03:54