【问题标题】:pandas get rows from one dataframe which are existed in other dataframepandas 从一个数据帧中获取存在于其他数据帧中的行
【发布时间】:2020-08-07 13:40:18
【问题描述】:

我有两个数据框。数据框如下:

df1 is
          numbers
user_id 
0         9154701244
1         9100913773
2         8639988041
3         8092118985
4         8143131334
5         9440609551
6         8309707235
7         8555033317
8         7095451372
9         8919206985
10        8688960416
11        9676230089
12        7036733390
13        9100914771

it's shape is (14,1)

df2 is

        user_id         numbers        names    type        duration    date_time
0       9032095748      919182206378   ramesh   incoming    23          233445445
1       9032095748      918919206983   suresh   incoming    45          233445445
2       9032095748      919030785187   rahul    incoming    45          233445445
3       9032095748      916281206641   jay      incoming    67          233445445
4       jakfnka998nknk  9874654411     query    incoming    25          8571228412
5       jakfnka998nknk  9874654112     form     incoming    42          678565487
6       jakfnka998nknk  9848022238     json     incoming    10          89547212765
7       ukajhj9417fka   9984741215     keert    incoming    32          8548412664
8       ukajhj9417fka   9979501984     arun     incoming    21          7541344646
9       ukajhj9417fka   95463241       paru     incoming    42          945151215451
10      ukajknva939o    7864621215     hari     outgoing    34          49829840920

and it's shape is (10308,6)

在 df1 中,列名编号具有多个唯一编号。这些数字在 df2 中可用,并且根据持续时间重复这些数字。我想根据 df1 中可用的数字获取所有存在于 df2 中的数据。

这是我尝试获取的代码,但我无法弄清楚如何使用 pandas 解决它。

df = pd.concat([df1, df2]) # concat dataframes
df = df.reset_index(drop=True) # reset the index
df_gpby = df.groupby(list(df.columns)) #group by
idx = [x[0] for x in df_gpby.groups.values() if len(x) == 1] #reindex
df = df.reindex(idx)

它只给了我 df2 中唯一的数字列。但我需要从第二个数据框中获取所有数据,包括其他列。

如果有人能在这方面帮助我,那就太好了。提前致谢。

【问题讨论】:

    标签: python-3.x pandas dataframe join


    【解决方案1】:

    这是一个示例数据框,我创建的内容保持不变。

    df1=pd.DataFrame({"numbers":[123,1234,12345,5421]})
    df2=pd.DataFrame({"numbers":[123,1234,12345,123,123,45643],"B":[1,2,3,4,5,6],"C":[2,3,4,5,6,7]})
    
    final_df=df2[df2.numbers.isin(df1.numbers)]
    

    输出数据帧结果是所有存在于df1和存在于df2中的唯一数字将被返回

       numbers  B  C
    0      123  1  2
    1     1234  2  3
    2    12345  3  4
    3      123  4  5
    4      123  5  6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2021-05-27
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多