Группировка по одинаковым именам столбцов в pandas добавляет «.1» к столбцу - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь сгруппировать одинаковые столбцы в одном кадре данных, аналогично этому вопросу: Группировка по одинаковым именам столбцов в пандах

Однако этот ответ не работает для меня. Когда я применяю принятый ответ на этот вопрос, мой фрейм данных добавляет «.1» ко второй итерации дублированных столбцов. В моих дублированных столбцах нет дублированных данных, в чем может быть проблема?

Вот мой стол:

Timepoint Col1 Col2 Col3 Col1 Col2 Col3

   1       1    2   3
   2       4    5   6
   3                      7    8    9
   4                      10   11   12

Я бы хотел, чтобы таблица выглядела так:

Timepoint Col1 Col2 Col3 
     1     1    2   3
     2     4    5   6
     3     7    8   9
     4     10   11  12

Но таблица выглядит так, когда я применяю связанный код:

Timepoint Col1 Col2 Col3 Col1.1 Col2.1 Col3.1

   1       1    2   3
   2       4    5   6
   3                      7      8     9
   4                      10     11    12

В моем фрейме данных есть сотни столбцов, поэтому мне нужно решение, которое не определяет столбцы, которые нужно сгруппировать.

Обратите внимание, что этот вопрос не является дубликатом этого вопроса: Сдвиньте NaN в конец соответствующих строк , поскольку у этого вопроса нет повторяющихся имен столбцов, и он переносит данные в столбец с другой меткой.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Создать индекс по Timepoint по DataFrame.set_index, затем использовать groupby с лямбда-функцией с split и агрегировать sum, или max, или mean, или first. Метод агрегации зависит от данных, но если всегда значения пропадания, как в примере вывода данных, всегда одинаковы:

df = (df.set_index('Timepoint')
       .groupby(lambda x: x.split('.')[0], axis=1).sum()
       .reset_index())
print (df)
   Timepoint  Col1  Col2  Col3
0          1   1.0   2.0   3.0
1          2   4.0   5.0   6.0
2          3   7.0   8.0   9.0
3          4  10.0  11.0  12.0
0 голосов
/ 20 марта 2019

пример решения:

import pandas as pd


data = """
Timepoint,Col1,Col2,Col3,Col1,Col2,Col3
1,1,2,3,,,
2,4,5,6,,,
3,,,,7,8,9
4,,,,10,11,12 
"""
df = pd.read_csv(pd.compat.StringIO(data), sep=',')
df.rename(columns=lambda x: x.split('.')[0], inplace=True)
print(df)

вывод:

   Timepoint  Col1  Col2  Col3  Col1  Col2  Col3
0          1   1.0   2.0   3.0   NaN   NaN   NaN
1          2   4.0   5.0   6.0   NaN   NaN   NaN
2          3   NaN   NaN   NaN   7.0   8.0   9.0
3          4   NaN   NaN   NaN  10.0  11.0  12.0

df = df.fillna(0)
print(df)

вывод:

   Timepoint  Col1  Col2  Col3  Col1  Col2  Col3
0          1   1.0   2.0   3.0   0.0   0.0   0.0
1          2   4.0   5.0   6.0   0.0   0.0   0.0
2          3   0.0   0.0   0.0   7.0   8.0   9.0
3          4   0.0   0.0   0.0  10.0  11.0  12.0

df = df.groupby(level=0, axis=1).sum()
print(df)

вывод:

   Col1  Col2  Col3  Timepoint
0   1.0   2.0   3.0        1.0
1   4.0   5.0   6.0        2.0
2   7.0   8.0   9.0        3.0
3  10.0  11.0  12.0        4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...