為 Pandas 列中的每個唯一值創建新的數據框

梅爾德龍

我有一個看起來像這樣的存在/不存在數據框(它要大得多,但已經減少了這個問題):

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 循環的經驗有限。

科拉連

您可以迭代您的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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

為每個組創建一個新的 100% 總列

為每個唯一項目創建一個唯一項目的 df 和另一列的最大值

如何將 Pandas 數據幀列中的所有值轉換為帶有計數的新列?

如何為熊貓數據框中的每一行映射/替換列中的多個值

如何為 Pandas 數據框中的每個組生成一個 uuid

為 Pandas 中的每個組添加一個新列

Python Pandas 數據框將 col 的值重塑為新的 col

如果值存在於原始列表中,pandas 從一個列表的列轉換以創建所有選項為二進制 yes/no 的新列

在 ES6 中為每個和數組創建一個數組

如何為數據框中的每個值創建重複項

Pandas 數據框將行轉換為列

如何將 Pandas 中的數據框列作為單元格列表插入到另一個數據框中?

Python Pandas:在已排序的多索引數據框中查找 n 並為每個 1 級索引返回 [0:n+1]

如何計算 Pandas 中 2 個數據框列的時間差(以分鐘為單位)

根據另一列中的條件,使用 .diff() 函數的結果在 pandas df 中創建一個新列

如何將 PySpark/Pandas 數據框中的日期/自定義/通用格式的列值轉換為日期格式?

如何為數據框中的每組數據創建帶有標題的子圖

使用行值作為 R 函數中的變量在數據框中創建新列

python pandas將唯一行轉換為具有各自數據的新列

根據列的值將 Pandas 數據幀拆分為多個數據幀

添加列作為 Pandas 中每個列元素的出現次數

pandas 數據框迭代作為列表的單元格值並將每個元素與其他單元格進行比較

從 Pandas Dataframe 中讀取數據並創建一棵樹並將其表示為字典

自動為數據框列表創建新列 - R

如何為 Pandas 數據框中的一系列重複列值分配唯一 ID?

根據唯一的列值將數據框拆分為更小的數據框

鍵作為行(字典中的 Pandas 數據框)

如何根據 Python Pandas 第一列中由“-”分隔的值創建 2 個新列?

將 Pandas 數據框中的列拆分為 n 列