python dataframe索引字段相同的合并_Pandas DataFrame-将具有相同索引的列的值合并到lis中...

我在这个问题上讨论了一段时间,但没有结果。这几乎是at least one other question on here的复制品,但我不太明白如何从网上的相关答案中找到我想要的东西。

我有一个Pandas数据框(我们称之为df),看起来像:Name Value Value2

'A' '8.8.8.8' 'x'

'B' '6.6.6.6' 'y'

'A' '6.6.6.6' 'x'

'A' '8.8.8.8' 'x'

其中Name是索引。我想把它转换成这样的东西:Name Value Value2

'A' ['8.8.8.8', '6.6.6.6'] 'x'

'B' ['6.6.6.6'] 'y'

因此,基本上,对应于同一索引的每个Value都应该组合成一个列表(或一个集合,或一个元组),并且该列表成为对应索引的Value。而且,如图所示,Value2在相似的索引行之间是相同的,所以最后应该保持不变。

我所做的(成功的)就是找出如何使Value列中的每个元素成为一个列表,其中包含:df['Value'] = pd.Series([[val] for val in df['Value']])

在我在本文开头链接的问题中,推荐的将列与重复索引结合的方法提供了一个使用df.groupby(df.index).sum()的解决方案。我知道除了df.index之外,我还需要一些东西作为groupby的参数,因为Value列被视为特殊列,而且我不确定应该用什么来代替sum(),因为这并不是我想要的。

希望我要找的东西很清楚,如果有什么我可以详细说明的,请告诉我。我也尝试过简单地循环遍历数据帧,查找具有相同索引的行,将Values组合成一个列表并相应地更新df。在尝试了这种方法之后,我想我会寻找一种更像熊猫的方法来解决这个问题。

编辑:作为德尔曼回答的后续,这个解决方案有点奏效了。Values似乎正确地连接到列表中。我发现unique函数返回一个Series,而不是DataFrame。另外,在实际设置中,我确实有更多的列,而不仅仅是Name、Value和Value2。但我想我能成功地解决这两个问题:gb = df.groupby(tuple(df.columns.difference(['Value'])))

result = pd.DataFrame(gb['Value'].unique(), columns=df.columns)

其中,第一行为列列表中减去Value列的groupby提供参数,第二行将unique返回的Series转换为与df具有相同列的DataFrame。

但我认为,所有这些都到位了(除非有人认为这有问题),几乎所有的事情都按预期进行。不过,这里似乎确实有些不对劲。当我试图将其输出到一个带有to_csv的文件时,顶部有重复的头(但只有某些头是重复的,而且据我所知没有实际的模式)。另外,Value列表被截断,这可能是一个更简单的问题。csv输出电流如下:Name Value Value2 Name Value2

'A' ['8.8.8.8' '7.7.7.7' 'x'

'B' ['6.6.6.6'] 'y'

上面看起来很奇怪,但这正是它在输出中的样子。注意,与本文开头的示例相反,假设A的值大于2Values(因此我可以说明这一点)。当我对实际数据执行此操作时,Value列表在前4个元素之后被切断。

你可能感兴趣的:(python)