2017-06-01 27 views
0

私は、次のデータフレームがあります。Python:2リストを含む列。それらの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を使用しています –

関連する問題