Как я могу проверить, если конкретный столбец имеет аналогичные значения для какой-либо строки. Примером подобного в этом случае является 456, аналогичное 654 - PullRequest
0 голосов
/ 09 октября 2019

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

#### load data###
import pandas as pd
df=pd.DataFrame(iris.data,columns=iris.feature_names)
df.head()

это дает мнеerror "Значение истинности Series неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()."а также не учитывает все строки

m=df.shape[0]
columns = [0]


df.iloc[2, :] = [3, 4, 5, 1]
df.iloc[3, :] = [3, 4, 4, 1]

for row1 in range(m-1):
    for row2 in range(row1+1, m):
        if (df.iloc[row1,columns].sum == df.iloc[row2, columns].sum).all():`
            # logic
            print ('Good!')
        else:
            print(f"nothing")

к сожалению, функция суммы здесь не проверяет каждую строку, и я не уверен, как это сделать

1 Ответ

0 голосов
/ 09 октября 2019

Map функция, которая добавляет цифры и затем использует np.where для назначения 'Good!', где значения duplicated.

In:

df = pd.DataFrame({'data': [456,654,235,532,111,354]})

def sum_digits(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

df['status'] = np.where(df.data.map(sum_digits).duplicated(keep=False), 'Good!', 'nothing')

Out:

   data   status
0   456    Good!
1   654    Good!
2   235    Good!
3   532    Good!
4   111  nothing
5   354  nothing
...