【问题标题】:Get n rows from a dataframe if exists that match a condition, else at least m rows [duplicate]如果存在匹配条件的数据帧,则从数据框中获取 n 行,否则至少 m 行 [重复]
【发布时间】:2021-03-03 13:29:55
【问题描述】:

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

df(包含大约 200 行)

Name,Country,Population
Chicago,USA,2694240
Luanda,Angola,8329798
Seattle,USA,783137
Meishan,China,723267
Colombo,Sri Lanka,612535
Taishan,China,524937
Faisalabad,Pakistan,3462295
Houston,USA,2340890
Rajshahi,Bangladesh,907732
Shaoyang,China,713559
Zamboanga City,Philippines,917477
Meerut,India,1696440
Mangalore,India,713357
Beira,Mozambique,569911
Samsun,Turkey,642592
Anqiu,China,682299
Jerusalem,Israel,931756
Zahedan,Iran,609873
Algiers,Algeria,2767661
Johannesburg,South Africa,5782747
Celaya,Mexico,680971
Kitwe,Zambia,685908
Da Nang,Vietnam,1125316

我想将按国家/地区分组的行放入另一个名为 sampled_df 的数据框中。对于随机选择,我使用下面的代码

if condition = 'True':
    rows = np.random.choice(df.index.values,len(df))
    sampled_df = df.loc[rows].groupby('Country').head(5)
    print (sampled_df)

输出

Name            Country     Population
Chicago         USA         2694240
Seattle         USA         783137
Houston         USA         2340890
Louisville      USA         624890
Indianapolis    USA         875929

使用上面的方法,我得到每个国家/地区的 5 个城市名称(最多)或 0 个(最坏的情况:“如果我错了,请纠正我”)。我想要的是选择应该是最多 5 个元素和至少 3 个元素。如何添加此过滤器?

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    您可以将 .between() 与 DataFrame 一起使用:

    df['ID'].between(2, 4, inclusive=False)
    

    这可能有用: How to select a range of values in a pandas dataframe column?

    【讨论】:

    • 我想你可能误解了我的意思。请看,在我的代码中,head(5) 用于将返回的行数限制为 5。在某些情况下,head(5) 可能仅返回两行或一行或零行,具体取决于 df。现在我只想要返回超过 3 行且最多 5 行的案例。希望现在更清楚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多