Pandas DataFrame Условно объединить - PullRequest
0 голосов
/ 02 февраля 2020

Я хочу объединить два кадра данных условно со следующими сценариями:

import pandas as pd

dfa = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
 'B': ['B0', 'B1', 'B2']})
dfb = pd.DataFrame({'A': ['A0', 'A1','A1', 'A2'],
 'C': ['C0', 'C1', 'C2','C3']})

dfc = dfa.merge(dfb)

for i in range(len(dfc.index)):
    if dfc['A'][i]==dfc['A'][i+1]:
        dfc.drop([i], inplace=True)

Но есть сообщение об ошибке KeyError: 4:

In [38]: runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
Traceback (most recent call last):

  File "C:\Users\Administrator\.spyder-py3\temp.py", line 18, in <module>
    if dfc['A'][i]==dfc['A'][i+1]:

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 1071, in __getitem__
    result = self.index.get_value(self, key)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 4730, in get_value
    return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))

  File "pandas/_libs/index.pyx", line 80, in pandas._libs.index.IndexEngine.get_value

  File "pandas/_libs/index.pyx", line 88, in pandas._libs.index.IndexEngine.get_value

  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc

  File "pandas/_libs/hashtable_class_helper.pxi", line 992, in pandas._libs.hashtable.Int64HashTable.get_item

  File "pandas/_libs/hashtable_class_helper.pxi", line 998, in pandas._libs.hashtable.Int64HashTable.get_item

KeyError: 4

Кроме того, когда я проверял dfc значение, строка 1 уже удалена:

In [30]: dfc
Out[30]: 
    A   B   C
0  A0  B0  C0
2  A1  B1  C2
3  A2  B2  C3

Однако, если я закодирую строку 12 dfc.drop([i], inplace=True) без inplace=True, я тоже получу ниже с ошибкой.

In [39]: df
Out[39]: 
    A   B   C
0  A0  B0  C0
1  A1  B1  C1
2  A1  B1  C2
3  A2  B2  C3

Что не так?

1 Ответ

0 голосов
/ 02 февраля 2020

Он упадет, но проблема будет

 dfc['A'][i+1]

Когда вы напечатаете (dfc['A'][i]) =>, вы получите 0 - A0,1 - A1,2 - A1,3 - A2.

Поэтому, когда вы сравниваете значения вроде:

dfc['A'][0] == dfc['A'][1]
dfc['A'][1] == dfc['A'][2]
dfc['A'][2] == dfc['A'][3] 
dfc['A'][3] == dfc['A'][4]

Но в вашем DataFrame нет значения dfc['A'][4]. Вот что говорит KeyError: 4. Короче, dfc['A'][i+1] выходит за пределы индекса, когда i = 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...