# Split dataset into 2 datasets based on Boolean column

**URL:** <https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295>\
**Category:** Ignition\
**Created:** [December 7, 2018, 7:56pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295 "2018-12-07T19:56:14Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [December 7, 2018, 7:56pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/1 "2018-12-07T19:56:14Z")

</div>

I’ve racked my brain with this a bit, and I haven’t come up with a solution that isn’t messy. The dataset has three columns, but I only want the first column split up into 2 datasets by the Boolean column which is column 3. So if Boolean is true then this item goes into dataset 1, else it goes to dataset 2. thanks

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [December 7, 2018, 8:22pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/2 "2018-12-07T20:22:32Z")

</div>

Not sure how messy is defined in this context, but this seems pretty short and sweet. And mostly painless.

[Filter to 2 Tables\_2018-12-07\_1518.proj](https://us1.discourse-cdn.com/inductiveautomation/original/2X/8/8e53ab8a5af677ffd5acd092a2eaad8f37a62037.proj) (28.6 KB)

 ![](https://us1.discourse-cdn.com/inductiveautomation/original/2X/6/674382623e60cedd81daa9b184cfeef8683a5c28.png)

propertyChange script:

```python
if event.propertyName == 'data':
  dataIn = system.dataset.toPyDataSet(event.source.data)
  trueTable = event.source.parent.getComponent('True Table')
  falseTable = event.source.parent.getComponent('False Table')
  
  headers = ['value']
  trueData = []
  falseData = []
  
  for row in dataIn:
    if row['Boolean Column'] == True:
      trueData.append([row['String Column']])
    else:
      falseData.append([row['String Column']])

  trueTable.data = system.dataset.toDataSet(headers, trueData)
  falseTable.data = system.dataset.toDataSet(headers, falseData)

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 7, 2018, 8:24pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/3 "2018-12-07T20:24:38Z")

</div>

I think @JordanCClark did it better, but:

```python
# set up a dataset to run this against
headers = ["H1", "H2", "H3"]
 
data = []
data.append(["a", 1, True])
data.append(["b", 2, False])
data.append(["c", 3, True])
data.append(["d", 4, False])
data.append(["e", 5, True])
 
dataset = system.dataset.toDataSet(headers, data)

# here's the actual logic
pds = system.dataset.toPyDataSet(dataset)

trueData = [[row[0]] for row in pds if row[2] == True]
falseData = [[row[0]] for row in pds if row[2] == False]

trueDataSet = system.dataset.toDataSet(["H1"], trueData)
falseDataSet = system.dataset.toDataSet(["H1"], falseData)

```

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [December 7, 2018, 8:26pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/4 "2018-12-07T20:26:33Z")

</div>

This was what I was leaning towards, I just hit a wall and couldn’t finish my logic. Thankfully it is Friday!!

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [December 7, 2018, 8:28pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/5 "2018-12-07T20:28:26Z")

</div>

I figured it was a Friday thing.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [December 7, 2018, 8:30pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/6 "2018-12-07T20:30:06Z")

</div>

> [@JordanCClark](#):
>
> if event.propertyName == 'data':

What is the need for this line?

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [December 7, 2018, 8:31pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/7 "2018-12-07T20:31:14Z")

</div>

Wait, is that so it only runs when the data property has changed?

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [December 7, 2018, 8:35pm UTC](https://forum.inductiveautomation.com/t/split-dataset-into-2-datasets-based-on-boolean-column/21295/8 "2018-12-07T20:35:11Z")

</div>

You got it, my friend!
