簡體   English   中英

熊貓:如果相交則更新數據框

[英]pandas: if intersection then update dataframe

我有兩個數據框:

國家:

    Country or Area Name    ISO-2   ISO-3
0   Afghanistan              AF     AFG
1   Philippines              PH     PHL
2   Albania                  AL     ALB
3   Norway                   NO     NOR
4   American Samoa           AS     ASM

合約:

    Country Name                   Jurisdiction     Signature year
0   Yemen                             KY;NO;CA;NO   1999.0
1   Yemen                                BM;TC;YE   2007.0
2   Congo,                                  CD;CD   2015.0
3   Philippines                                PH   2009.0
4   Philippines                             PH;PH   2007.0
5   Philippines                                PH   2001.0
6   Philippines                             PH;PH   1997.0
7   Bolivia, Plurinational State of         BO;BO   2006.0

我想要:

  1. 檢查contracts中的“ Jurdisctiction ”列是否至少包含來自countries ISO-2列的兩個字母代碼。

我已經嘗試了多種方法來測試是否有交叉路口,但是它們都不起作用。 我的最后嘗試是:

i1 = pd.Index(contracts['Jurisdiction of Incorporation'].str.split(';'))
i2 = pd.Index(countries['ISO-2'])
print i1, i2
i1.intersection(i2)

這給了我TypeError: unhashable type: 'list'

  1. 如果存在至少一種代碼,我想用new column更新contracts數據框, new column將僅包含布爾值

contracts['new column'] = np.where("piece of code that will actually work", 1, 0)

所以所需的輸出將是

    Country Name                   Jurisdiction     Signature year  new column
0   Yemen                             KY;NO;CA;NO   1999.0              1
1   Yemen                                BM;TC;YE   2007.0              0
2   Congo,                                  CD;CD   2015.0              0
3   Philippines                                PH   2009.0              1
4   Philippines                             PH;PH   2007.0              1
5   Philippines                                PH   2001.0              1
6   Philippines                             PH;PH   1997.0              1
7   Bolivia, Plurinational State of         BO;BO   2006.0              0

我該如何實現?

一點點,但是嘗試此:

occuring_iso_2_codes = set(countries['ISO-2'])

contracts['new column'] = contracts.Jurisdiction.apply(
    lambda s: int(bool(set(s.split(';')).intersection(occuring_iso_2_codes))))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM