Python Pandas:为每个索引值

时间:2017-01-10 14:33:16

标签: python pandas concatenation

对于此给定的示例数据框架 Starting data frame 我想连接" Level 1"的值。和" 2级"对于每个独特的项目,返回

Required result 结果应该只包含每个项目的一行,每个相关的值在" Level 1"和" 2级"用条形符号连接和分隔。

我目前正在使用一个相当缓慢的解决方案,包括在循环数据框时填充字典,但是想知道是否可以通过使用充分利用pandas的方法来实现更快的执行。

2 个答案:

答案 0 :(得分:3)

您可以在索引轴上执行groupby w.r.t.在选择与每个组对应的所有唯一元素后,通过将它们与sep="|"连接来汇总所有列。

df.groupby(level=0).agg(lambda grp: '|'.join(grp.unique()))

enter image description here

<强> 数据:

df = pd.DataFrame({'project': [1,1,1,1,1,2,3],
                   'Level 1': ['Fruit', 'Fruit', 'Fruit', 'Vegetable', 'Vegetable', 'Fruit', 'Vegetable'],
                   'Level 2': ['Apple', 'Banana', 'Lemon', 'Carrot', 'Tomato', 'Banana', 'Cucumber']})
df.set_index('project', inplace=True)

答案 1 :(得分:0)

这对你有用吗?

我将添加DF代码,以便让其他人更容易。

df = pd.DataFrame({'project': [1,1,1,1,1,2,3], 'Level 1' : ['Fruit', 'Fruit', 
'Fruit', 'Vegetable', 'Vegetable', 'Fruit', 'Vegetable'], 'Level 2' : ['Apple', 
'Banana', 'Lemon', 'Carrot', 'Tomato', 'Banana', 'Cucumber']})
df.set_index('project', inplace = True)

grouped = df.groupby(df.index).agg(lambda x: '|'.join(x.unique()))