我有一個看起來像這樣的存在/不存在資料框(它要大得多,但已經減少了這個問題):
annotations factor1 factor2 factor3 Class
heroine 1 0 1 OPIOID_TYPE
he smokes 0 1 0 OTHER_DRUG_USE
heroin 1 0 1 OPIOID_TYPE
我想做的是為“類”中的每個唯一值創建一個新資料框,并將類中的每個值作為每個資料框的最后一列的名稱插入,并記錄存在/不存在。
換句話說:
annotations factor1 factor2 factor3 OPIOID_TYPE
heroine 1 0 1 1
he smokes 0 1 0 0
heroin 1 0 1 1
和:
annotations factor1 factor2 factor3 OTHER_DRUG_USE
heroine 1 0 1 0
he smokes 0 1 0 1
heroin 1 0 1 0
實際上,我的資料幀要大得多,有 2289 行和 1273 列,并且“類”中有 23 個唯一值,總共 23 個新資料幀。
我認為回圈結構可以在這里作業,但我對 python 回圈的經驗有限。
uj5u.com熱心網友回復:
您可以迭代您的Class值:
dfs = {}
for klass in df['Class'].unique():
dfs[klass] = df.assign(**{klass: df['Class'].eq(klass).astype(int)}) \
.drop(columns='Class')
現在你有一個按Class值索引的字典:
>>> dfs.keys()
dict_keys(['OPIOID_TYPE', 'OTHER_DRUG_USE'])
>>> dfs['OPIOID_TYPE']
annotations factor1 factor2 factor3 OPIOID_TYPE
0 heroine 1 0 1 1
1 he smokes 0 1 0 0
2 heroin 1 0 1 1
>>> dfs['OTHER_DRUG_USE']
annotations factor1 factor2 factor3 OTHER_DRUG_USE
0 heroine 1 0 1 0
1 he smokes 0 1 0 1
2 heroin 1 0 1 0
強烈不鼓勵以下內容
現在如果你真的想要真正的 python 變數,你可以使用locals()動態創建它們:
for idx, klass in enumerate(df['Class'].unique(), 1):
print(f"df{idx} is for '{klass}' class")
locals()[f"df{idx}"] = df.assign(**{klass: df['Class'].eq(klass).astype(int)}) \
.drop(columns='Class')
# Output:
df1 is for 'OPIOID_TYPE' class
df2 is for 'OTHER_DRUG_USE' class
輸出:
>>> df1
annotations factor1 factor2 factor3 OPIOID_TYPE
0 heroine 1 0 1 1
1 he smokes 0 1 0 0
2 heroin 1 0 1 1
>>> df2
annotations factor1 factor2 factor3 OTHER_DRUG_USE
0 heroine 1 0 1 0
1 he smokes 0 1 0 1
2 heroin 1 0 1 0
uj5u.com熱心網友回復:
我們可以做get_dummies并將dfs保存到dict
s = df.pop('Class').str.get_dummies()
d = {x : df.join(s[[x]]) for x in s}
下面的示例輸出
d['OPIOID_TYPE']
Out[43]:
annotations factor1 factor2 factor3 OPIOID_TYPE
0 heroine 1 0 1 1
1 hesmokes 0 1 0 0
2 heroin 1 0 1 1
d['OTHER_DRUG_USE']
Out[44]:
annotations factor1 factor2 factor3 OTHER_DRUG_USE
0 heroine 1 0 1 0
1 hesmokes 0 1 0 1
2 heroin 1 0 1 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347392.html
下一篇:在R中回圈組合兩個資料框的列
