Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Dataframe中搜索行中的值并作为列表返回_Python_Pandas_Dataframe - Fatal编程技术网

Python 在Dataframe中搜索行中的值并作为列表返回

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和df2。df1本质上是一个库存列表,而df2是一个主列表

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]