【问题标题】:Python-join two dataframes to find same row values having different values in corresponding rowsPython-join两个数据框以查找在相应行中具有不同值的相同行值
【发布时间】:2020-05-12 13:07:49
【问题描述】:

我有以下格式的数据框:

#join two dataframes to find same row values having different values in corresponding rows
f = pd.DataFrame({'TS': [101, 102,103], 'date': ['2012-01-18','2014-11-16','2016-08-20'] , 'lbl': ['f', 'f', 'f']})
m = pd.DataFrame({'TS': [101, 101,104], 'date': ['2012-05-08','2013-01-26','2016-04-30'] , 'lbl': ['m', 'm', 'm']})

我想加入他们并按他们的 TS 和日期排序 即我需要知道哪个 TS 出现在另一个之后:

操作后的最终df如下所示:

TS      date     lbl
101   2012-01-08  f
101   2013-05-08  m
101   2013-01-26  m
102   2014-11-16  f
103   2016-08-20  f
104   2016-04-30  m

我试过了

result2=result.sort_values(['TS','date'],ascending=[True,True])

但是这给了我适当的结果,我想要相同的 TS 值和不同的日期值。我使用 groupby 吗?

【问题讨论】:

  • concat 然后对值进行排序:pd.concat((m,f)).sort_values(['TS','date'])?

标签: python pandas dataframe date group-by


【解决方案1】:

concatDataFrame.sort_values 一起使用:

result = pd.concat([f,m], ignore_index=True).sort_values(['TS','date'])
print (result)
    TS        date lbl
0  101  2012-01-18   f
3  101  2012-05-08   m
4  101  2013-01-26   m
1  102  2014-11-16   f
2  103  2016-08-20   f
5  104  2016-04-30   m

【讨论】:

  • @jezerael 做到了你的要求,但我想要的是这个imgur.com/a/9L0kDbi,即具有相同 TS 编号和连续日期值的值需要一个接一个地出现。我也尝试了 result.groupby('TRAINSET').apply(lambda x: x.sort_values(['date'])) 但这也给了我适当的结果
  • @DevarshiGoswami - 嗯,在实际数据中不起作用,因为 203 和 TC 之间有时有空格,有时没有空格
猜你喜欢
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2018-09-19
  • 1970-01-01
  • 2018-05-07
  • 2021-08-02
相关资源
最近更新 更多