簡體   English   中英

將數據幀編碼為樹狀嵌套 if 結構的有效方法?

[英]Efficient way to encode a dataframe into a tree-like, nested-if structure?

假設我有一個pandas數據框,看上去是這樣的:

 A   B   C   D   value
 1   4   6   9   100
 1   4   6   10  101
 1   5   7   9   100
 1   5   7   11  102
 1   5   8   10  105

也就是說,有一些識別特征的組合唯一地識別一行,然后是一些值。 在這種情況下, A, B, C, D有 4 個識別特征,這四個值的組合在數據框中將是唯一的。

我想print以下嵌套的if語句:

if A == 1
    if B == 4
        if C == 6
            if D == 9
                100
            if D == 10
                101
    if B == 5
        if C == 7
            if D == 9
                100
            if D == 11
                102
        if C == 8
            if D == 10
                105

假設我知道標識列已經按基數遞增的順序排列,將具有可變數量的標識符A, B, ...數據編碼為這種格式的有效方法(就存儲字符串所需的內存而言)是什么? ?

and也是允許的,所以我也可以像這樣表示樹:

if A == 1
    if B == 4 and C == 6
        if D == 9
            100
        if D == 10
            101
    if B == 5
        if C == 7
            if D == 9
                100
            if D == 11
                102
        if C == 8 and D == 10
            105

對后者會欣喜若狂,但是實現前者的解決方案已經解決了我的問題!

這是我拼湊的示例df

pd.DataFrame({'A': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], 
              'B': [4, 4, 5, 5, 5, 4, 4, 4, 4, 5, 4, 5, 5, 5, 5], 
              'C': [6, 6, 7, 7, 8, 6, 7, 7, 7, 8, 6, 7, 8, 8, 8], 
              'D': [9, 10, 9, 11, 10, 12, 12, 13, 15, 10, 9, 10, 9, 16, 17],
              'value': [100, 101, 100, 102, 105, 103, 103, 100, 101, 107, 102, 100, 111, 105, 109]})

好的,所以這不是您所要求的,但我認為值得考慮。

也許你可以訓練一個決策樹分類器。 然后您可以導出樹,然后編寫一些自定義代碼將樹轉換為 if 語句,這應該很簡單。 這是我正在修補的一些代碼:

import pandas as pd
from sklearn import tree
from graphviz import Source
import numpy as np

data = pd.DataFrame({'A': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], 
                     'B': [4, 4, 5, 5, 5, 4, 4, 4, 4, 5, 4, 5, 5, 5, 5], 
                     'C': [6, 6, 7, 7, 8, 6, 7, 7, 7, 8, 6, 7, 8, 8, 8], 
                     'D': [9, 10, 9, 11, 10, 12, 12, 13, 15, 10, 9, 10, 9, 16, 17], 
                     'value': [100, 101, 100, 102, 105, 103, 103, 100, 101, 107, 102, 100, 111, 105, 109]})


X = data[['A', 'B', 'C', "D"]]
Y = data["value"]

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)

# Display Tree
classes = Y.unique().astype(np.str)
Source( tree.export_graphviz(clf, out_file=None, feature_names=X.columns, class_names=classes) ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM