Панды, объединяющие кадры и ряды - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть главный блок данных sdb, который я хочу пройти в цикле for, получить уникальные значения из некоторых его столбцов и объединить их в новый выходной кадр данных df.Индекс будет отличаться для каждой серии, если он имеет только уникальные значения.см. ниже, куда я попал:

tbl = ''
i = 1
df = pd.DataFrame()

for col in sdb.columns:
    tbl = 'e_{}'.format(i)
    uni = sdb[col].nunique()
    if uni <= 25:
        tbl = pd.DataFrame(sdb[col].drop_duplicates())
        tbl.reset_index(drop=True)

    df = pd.concat([df, tbl], axis=1)

этот код работает, пока не дойдет до последней строки и не выдаст ошибку: не может объединить объект типа "";только pd.Series, pd.DataFrame ... это мне не ясно, так как, когда я делаю .info () как на tbl, так и на df, они отображаются как кадры данных.Любые мысли высоко ценится

1 Ответ

0 голосов
/ 19 сентября 2018

Вот пример, иллюстрирующий ситуацию:

import pandas as pd

tbl = ''
sdb = pd.DataFrame(
           {'A': [1, 2, 3, 4, 5],
            'B': [1, 2, 3, 4, 4],
            'C': [1, 2, 3, 3, 3],
            'D': [1, 2, 2, 2, 2]},
            index=[0, 1, 2, 3, 4])

df  = pd.DataFrame()
print(sdb)
print('\n')

for col in sdb.columns:
  uni = sdb[col].nunique()
  if uni <= 3:
    tbl = pd.DataFrame(sdb[col].drop_duplicates())
    tbl.reset_index(drop=True)

    df = pd.concat([df, tbl], axis=1)

print(df)

Вывод:

   A  B  C  D
0  1  1  1  1
1  2  2  2  2
2  3  3  3  2
3  4  4  3  2
4  5  4  3  2


   C    D
0  1  1.0
1  2  2.0
2  3  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...