Объединение повторяющихся строк данных с конкатенацией значений для определенного столбца - PullRequest
1 голос
/ 07 июня 2019

Я хочу объединить строки таким образом, чтобы я объединял значения для определенного столбца, но получал неожиданный результат в своем собственном наборе данных. Вот пример.

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 Ответ

1 голос
/ 07 июня 2019

На мой взгляд, проще всего сортировать значения в функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...