Python 在Dataframe中搜索行中的值并作为列表返回
抱歉,如果我没有正确地构建问题,但是我有两个数据帧,df1和df2。df1本质上是一个库存列表,而df2是一个主列表Python 在Dataframe中搜索行中的值并作为列表返回,python,pandas,dataframe,Python,Pandas,Dataframe,抱歉,如果我没有正确地构建问题,但是我有两个数据帧,df1和df2。df1本质上是一个库存列表,而df2是一个主列表 df1 = [['100', '12345678'], ['100', '12345677'], ['200', '12345655'], ['300', '12345652'], ['300', '12345671'], ['100', '12345633']] df1 = pd.DataFrame(data,columns=['id','sku']) df1可能包含每个项目
df1 = [['100', '12345678'], ['100', '12345677'], ['200', '12345655'], ['300', '12345652'], ['300', '12345671'], ['100', '12345633']]
df1 = pd.DataFrame(data,columns=['id','sku'])
df1可能包含每个项目的多个行,每个行具有不同的sku
id sku
0 100 12345678
1 100 12345677
2 200 12345655
3 300 12345652
4 300 12345671
5 100 12345633
df2只是一个项目列表
id name
0 100 Toy
1 200 Hammer
2 300 Guitar
我需要在df2中创建第三列,以反映df1中基于“id”的所有相关SKU,最好是作为值列表。预期结果如下所示:
id name skus
0 100 Toy ['12345678','12345677','12345633']
1 200 Hammer ['12345655']
2 300 Guitar ['12345652','12345671']
我所尝试的看起来是这样的,但我在每一行的df2['SKU']中都得到了一个空列表
gather_skus = df[df1.id.isin([df2.id])]
df2['skus'] = gather_skus.sku.tolist()
我还尝试了几次使用df.query的尝试,但都没有成功。如果有人能给我指出正确的方向,我将不胜感激
谢谢大家! 通过
'id'
聚合第一个数据帧,以创建与每个id关联的所有'sku'
的列表。由于聚合保证每个'id'
都是唯一的,因此将这些列表映射到第二个数据帧
df2['skus'] = df2['id'].map(df1.groupby('id')['sku'].agg(list))
id name skus
0 100 Toy [12345678, 12345677, 12345633]
1 200 Hammer [12345655]
2 300 Guitar [12345652, 12345671]
您的前几行代码中混入了df1
和数据。你能修好这个吗?哦,修好了。我尽可能简短地总结了一下。这看起来太棒了,谢谢。但是在使用它时遇到了一个奇怪的sqlalchemy错误,所以我正在深入研究。原始df是使用pd_read_sql_查询构建的,它抛出了一个不引用原始查询的sqlalchemy.exc.InterfaceError。我还不确定我从中得到了什么。@tnoe,嗯,我不确定,我对炼金术没有太多经验。
df2['skus'] = df2['id'].map(df1.groupby('id')['sku'].agg(list))
id name skus
0 100 Toy [12345678, 12345677, 12345633]
1 200 Hammer [12345655]
2 300 Guitar [12345652, 12345671]