Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]
Posted
技术标签:
【中文标题】Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]【英文标题】:Pandas: how to select rows in data frame based on condition of a specific value on a specific column [duplicate] 【发布时间】:2020-01-10 10:40:04 【问题描述】:我有一个给定的数据框,如下例:
0 1 2 3 4 5 6 7 8
0 842517 M 20.57 17.77 132.9 1326 0.08474 0.07864 0.0869
1 84300903 M 19.69 21.25 130 1203 0.1096 0.1599 0.1974
2 84348301 M 11.42 20.38 77.58 386.1 0.1425 0.2839 0.2414
3 843786 M 12.45 15.7 82.57 477.1 0.1278 0.17 0.1578
4 844359 M 18.25 19.98 119.6 1040 0.09463 0.109 0.1127
我编写了一个函数,该函数应根据特定列中的值与特定值的比较将数据集拆分为 2 个数据帧。
例如,如果我有col_idx = 2
和value=18.3
,结果应该是:
df1 - 低于值:
0 1 2 3 4 5 6 7 8
2 84348301 M 11.42 20.38 77.58 386.1 0.1425 0.2839 0.2414
3 843786 M 12.45 15.7 82.57 477.1 0.1278 0.17 0.1578
4 844359 M 18.25 19.98 119.6 1040 0.09463 0.109 0.1127
df2 - 高于值:
0 1 2 3 4 5 6 7 8
0 842517 M 20.57 17.77 132.9 1326 0.08474 0.07864 0.0869
1 84300903 M 19.69 21.25 130 1203 0.1096 0.1599 0.1974
函数应该如下所示:
def split_dataset(data_set, col_idx, value):
below_df = ?
above_df = ?
return below_df, above_df
有人可以完成我的脚本吗?
【问题讨论】:
【参考方案1】:below_df = data_set[data_set[col_idx] < value]
above_df = data_set[data_set[col_idx] > value] # you have to deal with data_set[col_idx] == value though
【讨论】:
【参考方案2】:你可以使用loc
:
def split_dataset(data_set, col_idx, value):
below_df = df.loc[df[col_idx]<=value]
above_df = df.loc[df[col_idx]>=value]
return below_df, above_df
df1,df2=split_dataset(df,'2',18.3)
输出:
df1
0 1 2 3 4 5 6 7 8
2 84348301 M 11.42 20.38 77.58 386.1 0.14250 0.2839 0.2414
3 843786 M 12.45 15.70 82.57 477.1 0.12780 0.1700 0.1578
4 844359 M 18.25 19.98 119.60 1040.0 0.09463 0.1090 0.1127
df2
0 1 2 3 4 5 6 7 8
0 842517 M 20.57 17.77 132.9 1326.0 0.08474 0.07864 0.0869
1 84300903 M 19.69 21.25 130.0 1203.0 0.10960 0.15990 0.1974
注意:
请注意,在此函数调用中,列的名称是数字。在调用函数之前,您必须知道正确的列类型。您可能必须使用string
类型。
您还应该定义如果将数据框划分的值(值)包含在数据框的列中会发生什么。
【讨论】:
以上是关于Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章