[英]Filling in blanks on a DataFrame with numbered variables - Python Pandas
我有一個 DataFrame 的格式:
ID Theme Operation Volume
100 Jungle S3 Full
200 Desert S3 Full
302 Cavern S1 Empty
303 Swamp nan Full
400 Jungle S3 nan
600 Desert nan Empty
我想編寫一個腳本來遍歷空單元格並從“nan”重新分配它們,並用變量 NA_ 替換它們,其中 _ 是它們缺少變量的計數。 所以我想要的 output 是:
ID Theme Operation Volume
100 Jungle S3 Full
200 Desert S3 Full
302 Cavern S1 Empty
303 Swamp NA1 Full
400 Jungle S3 NA3
600 Desert NA2 Empty
當我嘗試遍歷 df 並識別 nan 值時,出於某種原因,以下內容無效。
count = 0
for col in df.colums:
for row in df[col]:
if row == float('nan'):
row = 'NA{}'.format(count)
count += 1
任何想法為什么? 或者有沒有更好的方法來做到這一點,我很難看到?
謝謝:)
連接您的列,將 NaN 替換為 NA_(_ 替換為num
)並拆分您的列。 最后將修改后的列覆蓋為原始 dataframe:
tmp = df.reset_index().melt(id_vars='index', value_vars=['Operation', 'Volume'])
num = (tmp['value'].isna().cumsum()).astype(int)
tmp['value'] = tmp['value'].fillna('NA' + num.astype(str))
tmp = tmp.pivot(index='index', columns='variable', values='value')
df[tmp.columns] = tmp
>>> df
ID Theme Operation Volume
0 100 Jungle S3 Full
1 200 Desert S3 Full
2 302 Cavern S1 Empty
3 303 Swamp NA1 Full
4 400 Jungle S3 NA3
5 600 Desert NA2 Empty
有點困難,但並非不可能。
重要的是在對column
進行排序時創建層次結構 --> index
以根據值是否為 NA 創建每列的累積和。 基本上您不希望在操作之前計算 Volume NA 值。
s = df.stack(dropna=False).reset_index()
s['level_1'] = pd.Categorical(s['level_1'],categories=df.columns.tolist())
s1 = s.sort_values(by=['level_1','level_0']).set_index(['level_0','level_1']
).isna().cumsum().unstack(1).droplevel(0,1)
df = df.fillna('NA_' + s1.astype(str))
ID Theme Operation Volume
0 100 Jungle S3 Full
1 200 Desert S3 Full
2 302 Cavern S1 Empty
3 303 Swamp NA_1 Full
4 400 Jungle S3 NA_3
5 600 Desert NA_2 Empty
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.