【发布时间】:2020-10-28 05:31:59
【问题描述】:
我有两个 DF。我想遍历 DF1 中的行并过滤 DF2 中具有相同 id 的所有行,并在 DF1 的新列中获取列“B”值。
data = {'id': [1,2,3]}
df1 = pd.DataFrame(data)
data = {'id': [1, 1, 3,3,3], 'B': ['ab', 'bc','ad','ds','sd']}
df2 = pd.DataFrame(data)
DF1 - id(15k 行) DF2 - id, col1(50M 行)
期望的输出
data = {'id': [1,2,3],'B':['[ab,bc]','[]','[ad,ds,sd]']}
pd.DataFrame(data)
def func(df1):
temp3=df2.merge(pd.DataFrame(data=[df1.values]*len(df1),columns=df1.index),how='right',on=
['id'])
temp1 = temp3.B.values
return temp1
df1['B']=df1.apply(func,axis=1))
我在 df1 上使用合并来过滤和应用 lambda 函数。该代码在大型数据帧上执行需要 1 小时。如何让它运行得更快?
【问题讨论】:
-
id=2 在输出的列表中有一个额外的项目,不确定这是否有意义。
-
df1与df2具有相同的 ID。这是巧合吗?如果没有,你为什么需要df1?如果是,您能否向任一数据帧添加一些其他 ID? -
@cs95:编辑了输出。
-
另外,你真的想要列表外观的 strings 作为输出吗?
-
@DYZ:编辑了输出。我不需要字符串作为输出。只是所有具有 id 的关联 B 列值的数组
标签: python pandas dataframe optimization