2017-06-01 42 views
0

我有以下数据框:Python:2列包含列表。如何获得删除这两个列表之间的任何常见值的新列?

carrier flightnumber departureAirport arrivalAirport effectiveDate            date          group_dates 
0  4U   9748    DUS   GVA 2017-05-09 [2017-05-09, 2017-05-10, 2017-05-11, 2017-05-1... [2017-05-09, 2017-05-10, 2017-05-11, 2017-05-1... 
1  4U   9748    DUS   GVA 2017-05-14 [2017-05-14, 2017-05-15, 2017-05-16, 2017-05-1... [2017-05-09, 2017-05-10, 2017-05-11, 2017-05-1... 
2  4U   9748    DUS   GVA 2017-07-08 [2017-07-08, 2017-07-09, 2017-07-10, 2017-07-1... [2017-05-09, 2017-05-10, 2017-05-11, 2017-05-1... 
3  AG   1234    SFO   DFW 2017-03-09 [2017-03-09, 2017-03-10, 2017-03-11, 2017-03-1... [2017-03-09, 2017-03-10, 2017-03-11, 2017-03-1... 
4  AG   1234    SFO   DFW 2017-03-14 [2017-03-14, 2017-03-15, 2017-03-16, 2017-03-1... [2017-03-09, 2017-03-10, 2017-03-11, 2017-03-1... 

我想创建一个新的列,它是基本相同的列group_dates但删除列date

这里列出的任何元素的我做了什么:

我创建了一个自定义函数,并将其传递给apply

def get_unique_dates(row): 
    return [x for x in row['group_dates'] if x not in row['date']] 

df['unique_dates'] = df.apply(get_unique_dates, axis=1) 

但这返回以下错误:

ValueError: Empty data passed with indices specified. 
+0

哪个版本是熊猫吗? – frankyjuang

+0

我使用的版本是0.20.1 –

回答

1

这是一个缓慢的(.apply(..., axis=1))做法:

In [25]: df 
Out[25]: 
       a   b 
0 [a, b, c, d]  [e, a] 
1  [x, y, z] [g, i, z] 

In [26]: df['a_b'] = df.apply(lambda x: list(set(x.a) - set(x.b)), axis=1) 

In [27]: df 
Out[27]: 
       a   b  a_b 
0 [a, b, c, d]  [e, a] [c, d, b] 
1  [x, y, z] [g, i, z]  [y, x] 
+0

看起来好像我仍然得到相同的错误:ValueError:用指定的索引传递的空数据。 –

1

可以使用numpy.setdiff1d

import pandas as pd 
import numpy as np 
df=pd.DataFrame({'Date':[['a', 'b', 'c', 'd'],['x', 'y', 'z']],'GroupDate':[['e', 'a'],['g', 'i', 'z']]}) 
df['setdiff']=df.apply(lambda x: list(np.setdiff1d(x.GroupDate, x.Date)), axis=1) 
df 
Out[26]: 
      Date GroupDate setdiff 
0 [a, b, c, d]  [e, a]  [e] 
1  [x, y, z] [g, i, z] [g, i] 
+0

获取错误消息:ValueError:用指定索引传递的空数据。 –

+0

@RileyHun我正在使用Python 3.6,它在我身边很好。什么是你的Python版本?另外,你可以检查这个链接https://stackoverflow.com/questions/35992420/pandas-dataframe-apply-failing-after-pandas-to-datetime – Wen

+0

我使用Python 3.5 –

相关问题