【问题标题】:Filter Pandas Dataframe using list, but making sure count of elements matches count in list使用列表过滤 Pandas Dataframe,但确保元素的数量与列表中的数量匹配
【发布时间】:2021-12-06 12:35:09
【问题描述】:

所以我有一个清单

my_list = [1,1,2,3,4,4]

我有一个看起来像这样的数据框

col_1    col_2
a        1
b        1
c        2
d        3
e        3
f        4
g        4
h        4

我基本上想要一个像这样的最终数据帧

col_1    col_2
a        1
b        1
c        2
d        3
f        4
g        4

基本不会用

my_df[my_df['col_2'].isin(my_list)]

因为这将包括所有行。我想要与列表中每个项目匹配的第一行,但所有行数都相同。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    GroupBy.cumcount 用于带有原始和辅助DataFrame 的计数器,并通过DataFrame.merge 中的内部连接进行过滤:

    my_list = [1,1,2,3,4,4]
    
    df1 = pd.DataFrame({'col_2':my_list})
    df1['g'] = df1.groupby('col_2').cumcount()
    my_df['g'] = my_df.groupby('col_2').cumcount()
    
    df = my_df.merge(df1).drop('g', axis=1)
    
    print (df)
      col_1  col_2
    0     a      1
    1     b      1
    2     c      2
    3     d      3
    4     f      4
    5     g      4
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 1970-01-01
      • 2019-02-16
      • 2020-02-07
      • 2020-03-22
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多