Insert list into cells which meet column conditions
<p>Consider <code>df</code></p>

<pre><code>   A  B  C
0  3  2  1
1  4  2  3
2  1  4  1
3  2  2  3
</code></pre>

<p>I want to add another column <code>"D"</code> such that D contains different Lists based on conditions on <code>"A"</code>, <code>"B"</code> and <code>"C"</code></p>

<pre><code>   A  B  C  D
0  3  2  1  [1,0]
1  4  2  3  [1,0]
2  1  4  1  [0,2]
3  2  2  3  [2,0]
</code></pre>

<p>My code snippet looks like:</p>

<pre><code>df['D'] = 0
df['D'] = df['D'].astype(object)

df.loc[(df['A'] &gt; 1) &amp; (df['B'] &gt; 1), "D"] = [1,0]
df.loc[(df['A'] == 1) , "D"] = [0,2]
df.loc[(df['A'] == 2) &amp; (df['C'] != 0) , "D"] = [2,0]
</code></pre>

<p>When I try to run this code it throws the following error:</p>

<pre><code>ValueError: Must have equal len keys and value when setting with an iterable
</code></pre>

<p>I have converted the column into <code>Object</code> type as suggested <a href="http://stackoverflow.com/questions/26483254/python-pandas-insert-list-into-a-cell">here</a> but still with error.</p>

<p>What I can infer is that pandas is trying to iterate over the elements of the list and assigns each of those values to the cells where as I am trying to assign the entire list to all the cells meeting the criterion.</p>

<p>Is there any way I can assign lists in the above fashion?</p>

<p>Here's a goofy way to do it</p>

<pre><code>cond1 = df.A.gt(1) &amp; df.B.gt(1)
cond2 = df.A.eq(1)
cond3 = df.A.eq(2) &amp; df.C.ne(0)

df['D'] = cond3.map({True: [2, 0]}) \
  .combine_first(cond2.map({True: [0, 2]})) \
  .combine_first(cond1.map({True: [1, 0]})) \

df
</code></pre>

<p><a href="http://i.stack.imgur.com/f5SLl.png" rel="nofollow"><img src="http://i.stack.imgur.com/f5SLl.png" alt="enter image description here"></a></p>

python pandas