Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 合并数据帧行_Python_Pandas_Dataframe_Merge - Fatal编程技术网

Python 合并数据帧行

Python 合并数据帧行,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我有一个熊猫数据框,看起来像这样: Time Image_names 0 [a,b,c,d] 0 [a,c,d,e] 0 [c,d,e,f] 1 [e,f,g,h] 1 [f,g,h,i] 我希望获得的是:给定时间内所有唯一的图像名称 Time Image_names 0 [a,b,c,d,e] 1 [e,f,g,h,i] 我不确定是否必须使用groupby或joins T您可以使用set s=df.groupby('Time',as_index=F

我有一个熊猫数据框,看起来像这样:

Time Image_names
0    [a,b,c,d]
0    [a,c,d,e]
0    [c,d,e,f]
1    [e,f,g,h]
1    [f,g,h,i]
我希望获得的是:给定时间内所有唯一的图像名称

Time Image_names
0    [a,b,c,d,e]
1    [e,f,g,h,i]
我不确定是否必须使用groupby或joins


T

您可以使用
set

s=df.groupby('Time',as_index=False).Image_names.sum()
s.Image_names=list(map(set,s.Image_names))
s
Out[2034]: 
   Time         Image_names
0     0  {b, c, d, a, f, e}
1     1     {g, h, f, i, e}

一种方法是使用
itertools.chain

from itertools import chain
import pandas as pd


df = pd.DataFrame({'Time': [0, 0, 0, 1, 1],
                   'Image_names': [['a', 'b', 'c', 'd'],
                                   ['a', 'c', 'd', 'e'],
                                   ['c', 'd', 'e', 'f'],
                                   ['e', 'f', 'g', 'h'],
                                   ['f', 'g', 'h', 'i']]})

df = df.groupby('Time')['Image_names'].apply(chain.from_iterable).map(set).reset_index()

#    Time         Image_names
# 0     0  {c, a, f, d, e, b}
# 1     1     {g, h, f, e, i}
解释

  • 应用
    chain.from_iterable
    将每个组的列表加入到每个组的一个大列表中
  • 映射
    set
    然后为每个组创建一个集合
  • reset_index
    确保结果是具有所需列标题的数据帧

您可以使用以下功能:

import pandas as pd
import numpy as np

a=pd.DataFrame([[0,['a','b','c','d']],[0,['a','c','d','e']],
                [0,['c','d','e','f']],[1,['e','f','g','h']],
                [1,['f','g','h','i']]],
                columns=['Time','Image_names'])
a.groupby('Time')['Image_names'].sum().apply(np.unique)

#Out[242]: 
#Time
#0    [a, b, c, d, e, f]
#1       [e, f, g, h, i]
#Name: Image_names, dtype: object

从@jpp开始,您所需要的就是:df.groupby('Time')['Image\u names'].apply(lambda x:set(chain.From\u iterable(x)))这非常有效!但一旦我使用df.to_CSV(“resultsDf.CSV”)将此数据写入CSV,图像名称就会显示为set([b,c,d,a,f,e])@JagannathSaragadam adding
s.Image_names=s.Image_names.apply(list)
then to_CSV:-)