Reputation: 309
Here is a simplified version of my current dilemma.
Here is the dataframe:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 0]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 0]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
How do I add 1 to those cells in column B where x != y. The cells are lists and the 1 should be inserted at index 1.
The resultant table would look as follows:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 1]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 1]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
Many thanks.
Upvotes: 2
Views: 72
Reputation: 31682
You could apply
lambda:
df[df.x != df.y].B.apply(lambda x: x[:-1] + [1])
Example:
In [283]: df
Out[283]:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 0]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 0]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
mask = df.x != df.y
df.B[mask] = df.B[mask].apply(lambda x: x[:-1] + [1])
In [289]: df
Out[289]:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 1]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 1]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
Upvotes: 1
Reputation: 85492
This works:
def last_one(lst):
lst[1] = 1
df[df.x != df.y].B.apply(last_one)
df
before:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 0]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 0]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
and df
after:
x y A B
0 ding ding [0, 1] [0, 0]
1 ding dong [0, 1] [0, 1]
2 ding ding [0, 1] [0, 0]
3 ding ding [0, 1] [0, 0]
4 ding dong [0, 1] [0, 1]
5 ding ding [0, 1] [0, 0]
6 ding ding [0, 1] [0, 0]
Upvotes: 2