首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于另一个数据框中的列的子集pandas数据框

基于另一个数据框中的列的子集pandas数据框
EN

Stack Overflow用户
提问于 2020-07-27 23:32:25
回答 1查看 32关注 0票数 1

我有两个不同的数据集。根据column values in these 2 data frames的一个条件,我想创建一个新的数据集。

代码语言:javascript
复制
d1=pd.DataFrame({'ID':[57,58,59,68,61],'Period':['Day_3','Day_4','Day_5','Day_3','Day_2'],'pay':[1000,3000,2000,1000,5000]})
d2=pd.DataFrame({'ID':[68,58,59,42],'Period':['Day_1','Day_8','Day_9','Day_6'],'pay':[10000,30000,20000,10000]})

d1d2

代码语言:javascript
复制
    ID  Period  pay                        ID   Period  pay 

0   57  Day_3   1000                   0   68   Day_1   10000
1   58  Day_4   3000                   1   58   Day_8   30000
2   59  Day_5   2000                   2   59   Day_9   20000
3   68  Day_3   1000                   3   42   Day_6   10000
4   61  Day_2   5000

如果这些条件满足真temp=d1[d1.ID.isin(d2.ID) & d1['Period']<=d2['Period']],则temp将是子集

d1[d1.ID.isin(d2.ID)给出了部分结果,而d1['Period']<=d2['Period']] ValueError: Can only compare identically-labeled Series objects抛出了一个错误,我从days中提取了数字,并将这些值存储为day_numbers列,然后执行上面的代码,我得到了同样的错误。

我要的结果是,

代码语言:javascript
复制
   ID   Period  pay
0  58   Day_4   3000
1  59   Day_5   2000

How to get this result?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-27 23:38:23

在列ID上使用DataFrame.merge,并通过比较mask的数字部分创建一个布尔Period,然后使用此掩码筛选行:

代码语言:javascript
复制
df = d1.merge(d2[['ID', 'Period']], on='ID', suffixes=['', '_r'])
mask = (
    df['Period'].str.split('_').str[-1].astype(int) <=
    df['Period_r'].str.split('_').str[-1].astype(int)
)
df = df[mask].drop('Period_r', 1)

结果:

代码语言:javascript
复制
print(df)

   ID Period   pay
0  58  Day_4  3000
1  59  Day_5  2000
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63118590

复制
相关文章

相似问题

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