[英]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.stack
和df.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.