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:-)