簡體   English   中英

在 python 中轉換數據幀

[英]Transforming data frame in python

我有以下數據集的情況:

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

應將其轉換為以下數據框:

ID    A
 1    aa
 2    bb
 3    cc
 4    aa

所以本質上是移動行,使其適合第一列

在將符號“-” replace為 nan 之后,您可以使用bfill和沿列的軸:

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

您可以使用df.replace-替換為 np.nan 並將'ID'設置為索引,然后將df.stackdf.droplevel

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

ID
1     aa
2     bb
3     cc
4    aaa
dtype: object
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

你可以試試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM