我想以某种方式合并行,即我将特定列的值连接起来,但是在我自己的数据集上得到了一些意外的结果。这是一个例子。
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”列的值却相同。
有什么想法吗?
答案 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