Изменение только 4 столбцов - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь преобразовать 4 столбца из моего DataFrame в уникальный столбец.

У меня есть следующий DataFrame:

    doggo   floofer pupper  puppo
0   None    None    None    None
1   None    None    None    None
2   None    None    None    None
3   None    None    None    None
4   None    None    None    None
5   None    None    None    None
6   None    None    None    None
7   None    None    None    None
8   None    None    None    None
9   doggo   None    None    None
10  None    None    None    None
11  None    None    None    None
12  None    None    None    puppo
13  None    None    None    None
14  None    None    None    puppo

Мне нужен уникальный столбец, заполненный значениями None',' doggo ',' floofer ',' pupper ',' puppo '.

Я пытался использовать функцию Melt безуспешно.

мой фактический код:

melt = pd.melt(melt, id_vars=['doggo', 'floofer', 'pupper', 'puppo'], var_name='classification')

Любая помощь?

РЕДАКТИРОВАТЬ

Ниже полное решение (комментарии на португальском языке):

#criar uma cópia do DataFrame para não comprometer o DataFrame original
df = twitter_archive.copy()

#Apagar os valores None 
df = df.replace('None', '')

#criar e preencher a coluna classification com as informações das colunas doggo, floofer, pupper e puppo
df['classification'] = (df['doggo'].fillna('') + df['floofer'].fillna('') + df['pupper'].fillna('') + df['puppo'].fillna('')).replace('', np.nan)

#Dropar todas as colunas e deixar somente a classification
df = df.drop(columns=['in_reply_to_status_id', 'in_reply_to_user_id', 'timestamp', 'source', 'text', 'retweeted_status_id', 'retweeted_status_user_id', 'retweeted_status_timestamp', 'expanded_urls', 'rating_numerator', 'rating_denominator', 'name', 'doggo','floofer', 'pupper', 'puppo'])

#Acrescentar a coluna classification no DataFrame twitter_archive e remover as colunas doggo, floofer, pupper e puppo
twitter_archive = pd.merge(twitter_archive, df, on= 'tweet_id')
twitter_archive = twitter_archive.drop(columns=['doggo', 'floofer', 'pupper', 'puppo'])

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Быстрый и грязный способ сделать это:

df['classification'] = (df['doggo'].fillna('') + df['floofer'].fillna('') + df['pupper'].fillna('') + df['puppo'].fillna('')).replace('', np.nan)
0 голосов
/ 20 ноября 2018

просто заставь взять максимум.Каждая строка больше, чем None.Предполагая, что ваши записи (на строку) являются уникальными.Следующее должно работать

d = {"col1": [None, "x", None], "col2": ["y",None, None]}
x = pd.DataFrame(d)
x["col3"] = x[["col1", "col2"]].max(axis=1)

Вывод:

   col1  col2  col3
0  None     y     y
1     x  None     x
2  None  None  None
...