pandas(数据帧)选择数据

时间:2017-05-15 16:47:16

标签: python pandas dataframe

大家好,

我使用数据框创建两个表(A和B),两者都有相同的列。 (第一列是'ID',一个表可能有多个具有相同ID的行)

我想基于A和B中的一些行创建一个新表(C)。 如果表B中的ID也出现在A中,则将该行添加到C中。

我的代码:

from pandas import DataFrame

A_ID = [1,2,3,1,2]
A_place = [1,2,3,2,1]

B_ID = [4,2,6]
B_place = [2,2,3]

A_data = {'ID':A_ID,'place':A_place}
A_table = DataFrame(A_data)

B_data = {'ID':B_ID,'place':B_place}
B_table = DataFrame(B_data)

C_table = A_table 

for n in range(len(B_table)): 
  if B_table['ID'][n] in list(A_table['ID']):
    C_table = C_table.append(B_table[n:n+1])

问题:

我的问题是,如果不使用for循环,还有其他方法吗? 我将处理数百万的数据,并且浪费很多时间。

顺便问一下,还有比熊猫更好的其他工具来处理大数据吗?

谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

看看你正在做什么,这样做会更有效:

C_table = pd.concat([C_table, B_table[B_table['ID'].isin(A_table['ID'])]])

首先是内部声明:

B_table[B_table['ID'].isin(A_table['ID'])]

过滤掉B_table中ID不在表A_table中的行,因为您只是追加,而不是在一个较慢的时间附加一行,只是concat他们与现有C_table