因此,当第1列的字符串具有相同的名称时,应按第0列汇总所有数据,并添加第1列的所有字符串,并对第2列的数字求和。
使用以下代码,我可以聚合字符串,但不对数字求和:
df2= df1.groupby([0]).agg(lambda x: ','.join(set(x))).reset_index()
df2
答案 0 :(得分:1)
您想要的输出建议您有任意数量的列,具体取决于每个组1
的{{1}}中的值数量。这是反熊猫,强烈针对任意数量的行。因此,逐个序列操作是首选。
因此,您只需使用0
+ groupby
即可存储您所需的所有信息。
sum
0 1 2 0 2008-04_E.pdf Mat1 3 1 2008-04_E.pdf Mat2 2
如果您坚持自己的特殊要求,则可以通过上述计算的df = pd.DataFrame({0: ['2008-04_E.pdf']*3,
1: ['Mat1', 'Mat2', 'Mat2'],
2: [3, 1, 1]})
df_sum = df.groupby([0, 1]).sum().reset_index()
print(df_sum)
如下实现。
df_sum
Key1 Key2 Key1 Key2 0 2008-04_E.pdf Mat1 Mat2 3 2
答案 1 :(得分:1)
这似乎是一个两步过程。它还要求第1列中的每个组在第2列中具有相同数量的唯一元素。首先,按要分组的列进行分组
df_grouped = df.groupby([0,1]).sum().reset_index()
然后重塑为所需的表单:
def group_to_row(group):
group = group.sort_values(1)
output = []
for i, row in group[[1,2]].iterrows():
output += row.tolist()
return pd.DataFrame(data=[output])
df_output = df_grouped.groupby(0).apply(group_to_row).reset_index()
这是未经测试的,但这也是一种非标准格式,因此很遗憾,我认为没有为您提供标准的Pandas函数。