Преобразование кадра данных в python - PullRequest
1 голос
/ 18 июня 2020

У меня есть следующий набор данных:

ID      A     B    C
1      aa     -    -
2      -      bb   -
3      -      -    cc
4      aaa    -    -

, который должен быть преобразован в следующий фрейм данных:

ID    A
 1    aa
 2    bb
 3    cc
 4    aa

Таким образом, строки смещаются так, чтобы в первый столбец

Ответы [ 4 ]

3 голосов
/ 18 июня 2020

Вы можете использовать df.replace, чтобы заменить - на np.nan и установить 'ID' в качестве индекса, затем df.stack и df.droplevel

df.replace('-',np.nan).set_index('ID').stack().droplevel(1)

ID
1     aa
2     bb
3     cc
4    aaa
dtype: object
3 голосов
/ 18 июня 2020

вы можете использовать bfill с осью вдоль столбцов после replace символа '-' по nan:

df_ = df.replace('-', np.nan).bfill(1)[['ID', 'A']]
print(df_)
  ID    A
0  1   aa
1  2   bb
2  3   cc
3  4  aaa
1 голос
/ 18 июня 2020

Вы можете попробовать это:

df.replace('-', np.nan, inplace=True)
df['new'] = df[df.columns[1:]].apply(
    lambda x: ''.join(x.dropna().astype(str)),
    axis=1
)
df = df[['ID', 'new']]
print(df)

Результат:

   ID  new
0   1   aa
1   2   bb
2   3   cc
3   4  aaa
1 голос
/ 18 июня 2020
for i in range(len(df)):
    if df.at[i, 'A'] == '-':
        if df.at[i, 'B'] == '-':
            df.at[i, 'A'] = df.at[i, 'C']
        else:
            df.at[i, 'A'] = df.at[i, 'B']

df.drop(['B', 'C'], axis=1, inplace = True)

Просто используя вложенные операторы if, чтобы найти столбец, в котором есть что-то отличное от -, и присвоить это значение значению в столбце A.

**Output** : df

    ID  A
0   1   aa
1   2   bb
2   3   cc
3   4   aaa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...