[英]Creating missing dummy indicator variable for a list of variable in a dataframe with specific values in python (pandas)
我在 pandas 中有一個大型數據集。 為簡潔起見,假設我有以下內容
df = pd.DataFrame({'col1': [101,101,101,201,201,201,np.nan],
'col2':[123,123,124,np.nan,321,321,456],
'col3':['a',0.7,0.6,1.01,2,1,2],
'col4':['w',0.2,'b',0.7,'z',2,3],
'col5':[21,'z',0.3,2.3,0.8,'z',1.001],
'col6':[11.3,202.0,0.2,0.3,41.0,47,2],
'col7':['A','B','C','D','E','F','G']})
現在我想創建帶有后綴_missing
的分類變量,這樣對於數據集中包含缺失nan
的任何列,都應該創建一個新列(變量),其值為1
表示“nan”值,否則為0
。 例如,對於col1
和col2
,它們對應的變量將是col1_missing
和col2_missing
。
然后對於像col3
這樣在應該是數字的列中有字母的列,我會喜歡與上述類似的結果,但類別的級別會隨着不同字母的數量而增加。 例如,對應於col4
的新列將是col4_missing
並且將包含 0 用於非字母, 1
用於b
, 2
用於w
和3
用於z
。 因此生成的框架應如下所示:
有沒有 python function 或 package 可以做到這一點? 作為一個新手,老實說,我對此感到不知所措,我將不勝感激在這方面的任何幫助。
您可以map
字典中的值:
def flag(s):
flags = {'b': 1, 'w': 2, 'z': 3}
return s.fillna('b').map(lambda x: flags.get(x, 0))
out = (pd
.concat([df, df.apply(flag).add_suffix('_missing')], axis=1)
.sort_index(axis=1)
)
Output:
col1 col1_missing col2 col2_missing col3 col3_missing col4 col4_missing col5 col5_missing col6 col6_missing col7 col7_missing
0 101.0 0 123.0 0 a 0 w 2 21 0 11.3 0 A 0
1 101.0 0 123.0 0 0.7 0 0.2 0 z 3 202.0 0 B 0
2 101.0 0 124.0 0 0.6 0 b 1 0.3 0 0.2 0 C 0
3 201.0 0 NaN 1 1.01 0 0.7 0 2.3 0 0.3 0 D 0
4 201.0 0 321.0 0 2 0 z 3 0.8 0 41.0 0 E 0
5 201.0 0 321.0 0 1 0 2 0 z 3 47.0 0 F 0
6 NaN 1 456.0 0 2 0 3 0 1.001 0 2.0 0 G 0
def flag(s):
flags = {'b': 1, 'w': 2, 'z': 3}
return s.fillna('b').map(lambda x: flags.get(x, 0))
# flag values
df2 = df.apply(flag).add_suffix('_missing')
# keep only columns with at least one flag
df2 = df2.loc[:, df2.ne(0).any()]
out = (pd
.concat([df, df2], axis=1)
.sort_index(axis=1)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.