首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将数据帧的行与二维数组列表进行比较- Python

如何将数据帧的行与二维数组列表进行比较- Python
EN

Stack Overflow用户
提问于 2019-06-05 03:36:05
回答 3查看 156关注 0票数 1

我的目标是将DataFrame行与二维数组列表中的每一项进行比较。

列表如下: my = mylist

代码语言:javascript
复制
1       2000
2       2000a
3       2000b

这里是我的= df

代码语言:javascript
复制
RPN      Source       city  
1       netflix       baltimore
1       netflix       baltimore
2       hulu          orlando
4       hulu          houston

如上所述,我想从一个列表中创建一个新列,将我的DataFrame中的每个RPN与mylist的第一个位置进行比较。如果RPN在mylist中,则获取与其关联的数组的第二个位置,并将其附加到要连接到数据帧的列表中。如果找不到,只需使用RPN。

所需的输出

代码语言:javascript
复制
RPN      Source          city           npi
1       netflix       baltimore        2000
1       netflix       baltimore        2000
2       hulu          orlando          2000a
4       hulu          houston            4

下面是我的代码,它可以工作,但是我只为每条记录获取RPN,而不是与mylist中的RPN相关联的NPI

代码语言:javascript
复制
#Seperates Portico from Facets, FEP, Nasco, ETC
portico = df[df['SOURCE'] == 'PORTICO']
comparelist = []

#creates a list of RPN and NPI
mylist = portico[['RPN','NPI']].values.tolist()       
for index,x in df.iterrows():
        RPN = x['RPN']
        for a in mylist:
            if RPN in a:
                comparelist.append(a)
            else:
                comparelist.append(RPN)
            break
    df = df.drop(columns = ['NPI'])
    df['NPI'] = comparelist

电流输出

代码语言:javascript
复制
RPN      Source          city           npi
1       netflix       baltimore        1
1       netflix       baltimore        1
2       hulu          orlando          2
4       hulu          houston          4
EN

回答 3

Stack Overflow用户

发布于 2019-06-05 03:43:47

如果您不介意为mylist创建多一个数据帧,一种方法可能是使用merge

代码语言:javascript
复制
mylist_df = pd.DataFrame(mylist, columns=['RPN', 'npi']) # creating other df 
df = df.merge(mylist_df, how='left', on='RPN')
df['npi'].fillna(df['RPN'], inplace=True) # fill na values with RPN of same dataframe
票数 1
EN

Stack Overflow用户

发布于 2019-06-05 03:44:01

使用map + fillna替换未映射的值。根据mylist的形状选择正确的字典:

代码语言:javascript
复制
d = dict(zip(*mylist)) # if [[1, 2, 3], ['2000', '2000a', '2000b']]
d = dict(mylist)       # if [[1, '2000'], [2, '2000a'], [3,'2000b']]

df['npi'] = df.RPN.map(d).fillna(df.RPN)

#   RPN   Source       city    npi
#0    1  netflix  baltimore   2000
#1    1  netflix  baltimore   2000
#2    2     hulu    orlando  2000a
#3    4     hulu    houston      4
票数 0
EN

Stack Overflow用户

发布于 2019-06-05 03:57:08

这可以看作是一个左连接,然后进行fillna操作。

代码语言:javascript
复制
my_series = pd.series(index=[1, 2, 3], data=['2000', '2000a', '2000b'], name='RPN')

df = pd.DataFrame({"RPN": [1, 1, 2, 4], "Source": ['netflix', 'netflix', 'hulu', 'hulu']}).set_index("RPN")

result = df.join(my_series, how="left").reset_index()

result = result.fillna(result.RPN, axis=0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56450251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档