将重复的数据框行与特定列的连接值组合

时间:2019-06-07 09:27:18

标签: python pandas pandas-groupby

我想以某种方式合并行,即我将特定列的值连接起来,但是在我自己的数据集上得到了一些意外的结果。这是一个例子。

df = pd.DataFrame({'id':['1', '2', '3', '1', '3', '4', '4', '6', '6'],
                'words':['a', 'b', 'c', 'b', 'a', 'a', 'b', 'c', 'a' ]})
df2 = df.groupby('id')['words'].apply(' '.join).reset_index()

df2.head()

结果看起来像这样,这是我想要的,很好。

    id  words
0   1   a b
1   2   b
2   3   c a
3   4   a b
4   6   c a

基于单词列的唯一值,再次看起来不错:

df2.words.value_counts()
c a    2
a b    2
b      1
Name: words, dtype: int64

但是,在我自己的数据集很大(无法在此处真正重现)的情况下,df2.words.value_counts()的输出会产生类似的内容,我无法弄清原因。知道这里可能出什么问题吗?

df2.words.value_counts()
c a    10
a c    5
a b    10
b a    5
b      1
Name: words, dtype: int64

但是应该如下:

df2.words.value_counts()
c a    15
a b    10
b      1
Name: words, dtype: int64

这里的值是伪造的,但“ words”列的值却相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是在join函数中对值进行排序,因此value_counts可以正常工作:

df2 = df.groupby('id')['words'].apply(lambda x: ' '.join(sorted(x))).reset_index()
print (df2)
  id words
0  1   a b
1  2     b
2  3   a c
3  4   a b
4  6   a c

print (df2.words.value_counts())
a b    2
a c    2
b      1
Name: words, dtype: int64