对于此给定的示例数据框架 Starting data frame 我想连接" Level 1"的值。和" 2级"对于每个独特的项目,返回
Required result 结果应该只包含每个项目的一行,每个相关的值在" Level 1"和" 2级"用条形符号连接和分隔。
我目前正在使用一个相当缓慢的解决方案,包括在循环数据框时填充字典,但是想知道是否可以通过使用充分利用pandas的方法来实现更快的执行。
答案 0 :(得分:3)
您可以在索引轴上执行groupby
w.r.t.在选择与每个组对应的所有唯一元素后,通过将它们与sep="|"
连接来汇总所有列。
df.groupby(level=0).agg(lambda grp: '|'.join(grp.unique()))
<强> 数据:的强>
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()))