Панды, суммирующие две строки в фрейме данных

#python #pandas #dataframe #pandas-groupby

#python #pandas #фрейм данных #pandas-groupby

Вопрос:

У меня есть фрейм данных, в котором мне нужно объединить две строки. Пример:

 <table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>City1</td>
<td>Pop1</td>
<td>Area1</td>
</tr>
<tr>
<td>City2</td>
<td>Pop2</td>
<td>Area2</td>
</tr>
<tr>
<td>City1</td>
<td>Pop3</td>
<td>Area3</td>
</tr>
</tbody>
</table> 

Я хочу объединить City1 в одну строку и пытаюсь добавить (суммировать) население и площадь
Ожидаемый результат должен быть таким:

 <table>
  <thead>
    <tr>
      <th>Col1</th>
      <th>Col2</th>
      <th>Col3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>City1</td>
      <td>Pop(1 3)</td>
      <td>Area(1 3)</td>
    </tr>
    <tr>
      <td>City2</td>
      <td>Pop2</td>
      <td>Area2</td>
    </tr>
  </tbody>
</table> 

Я пробовал разные варианты
df.groupby(['Col1']).aggregate({'Col2': "sum", 'Col3': "sum"})

Это объединяет строки, но вместо суммирования значений просто записывает их по одному рядом друг с другом, например: City1, Pop1Pop3, Area1Area3.

Чего мне не хватает?

Ответ №1:

Преобразуйте dtype Col2 и Col3 в int или float . Они объединяются, потому что они рассматриваются как str (или объекты)

Комментарии:

1. Я только что попробовал это, и я получил еще одну ошибку, так как число равно 669,338. Я попытался преобразовать строку в число с плавающей запятой, но это выдает ошибку. Я думаю, проблема в том, что в качестве разделителя вместо точки используется запятая. 669,338 вместо 669,338.

2. Мне удалось решить эту проблему, я заменил запятую точкой, а затем преобразовал их в int. Спасибо!