我最近问了一个问题 - How do I add conditionally to a selection of cells in a pandas dataframe column when the the column is a series of lists?,但我相信有一个我以前没有考过过的新问题。
在以下数据框中,我需要两个条件才能更改列d
。列d
中的每个值都是list
。
a == b
,d中的最后一个整数加1。在a != b
的位置,扩展了整数列表,并在1
列的list
末尾插入了值d
。
a b c d
On On [0] [0,3]
On Off [0] [0,1]
On On [0] [2]
On On [0] [0,4,4]
On Off [0] [0]
结果,数据框就是这样的:
a b c d
On On [0] [0,4]
On Off [0] [0,1,1]
On On [0] [3]
On On [0] [0,4,5]
On Off [0] [0,1]
我意识到这可以使用pd.Series.apply
方法结合预定义函数或使用lambda
来完成,但是数据框由100000行组成,我希望这两个行的矢量化解决方案条件可能存在。
答案 0 :(得分:0)
作为Edchum says,有效的解决方案可能会有问题。
一个apply
自定义functions
的非矢量化解决方案:
df['e'] = df['d']
def exten(lst):
return lst + [1]
def incre(lst):
lst[-1] = lst[-1] + 1
return lst
df.loc[df.a != df.b, 'd'] = df.e.apply(exten)
df.loc[df.a == df.b, 'd'] = df.e.apply(incre)
df = df.drop('e', axis=1)
print df
a b c d
0 On On [0] [0, 4]
1 On Off [0] [0, 1, 1]
2 On On [0] [3]
3 On On [0] [0, 4, 5]
4 On Off [0] [0, 1]