Aru*_*non 7 python dataframe pandas
我被困在如何根据索引位置过滤出一组行。为了更清楚,让我们有一个虚拟问题,假设我有一个用户具有多个配置文件的数据框,例如在 df1 中,我有三个用户 John、Johnny 和 Ben 具有多个配置文件..
df1 = pd.DataFrame({"user": ["Peter (1)", "Peter (2)", "Peter (3)","John (1)","John (2)","John (3)","Johnny (1)","Johnny (2)"], "value": [1, 3, 3, 1, 6, 3, 4, 1]}, )
Run Code Online (Sandbox Code Playgroud)
我根据值对 df1 进行排序并重新索引它
df1=df1.sort_values(by='value', ascending=False)
df1.index=[0, 1, 2, 3, 4, 5, 6, 7]
df1 看起来像这样
现在我被困在如何为具有第一个索引值的用户(在本例中为 John)过滤掉行,让我们说新数据帧 df2,以及将第二个索引用户(在本例中为 Johnny)的行过滤到新数据帧 df3预期的 df2 应该是这样的
df3 应该如下所示
您可以获取第一个索引值并将其拆分并排除最后一项(假设用户名可能有括号),然后在整个数据框中搜索该特定列的值。例如:
firstIndexUser = df1['user'].str.split('(').str[:-1].str.join('(').iloc[0]
Run Code Online (Sandbox Code Playgroud)
这个firstIndexUser的值为' John '现在你可以与整个数据帧进行比较以获得你的df2
df2 = df1[df1['user'].str.split('(').str[:-1].str.join('(')==firstIndexUser]
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
>>df2
user value
0 John (2) 6
4 John (3) 3
6 John (1) 1
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以重置 df2 的索引
>>df2.reset_index(drop=True, inplace=True)
>>df2
user value
0 John (2) 6
1 John (3) 3
2 John (1) 1
Run Code Online (Sandbox Code Playgroud)
您可以对 df3 采用类似的方法