pandas - 根据值(重复)提取 Pandas 数据帧的子集?

标签 pandas indexing dataframe duplicates subset

假设我有以下数据框:

elements =  [1,1,1,1,1,2,3,4,5]
df = pd.DataFrame({'elements': elements})
df.set_index(['elements'])
print df
   elements
0      1
1      1
2      1
3      1
4      1
5      2
6      3

我有一个 list [1, 1, 2, 3]我想要一个包含这 4 个元素的数据框子集,例如:
   elements
0      1
1      1   
5      2
6      3

我已经能够通过构建一个 dict 来计算数组中的项目出现次数并通过附加初始数据框的子部分来构建新数据框来处理它。

你知道一些数据框方法来帮助我找到更优雅的解决方案吗?

在@jezrael 评论之后:我必须补充一点,我需要跟踪初始索引(在 df 中)。

我们可以将 df (第一个数据框)视为资源存储库,我需要跟踪哪些行/索引被归因:

用例是:在 df 中的元素中给我两个 1、一个 2 和一个 3。我会坚持这样一个事实,即我将第 0 行和第 1 行设为 1,将第 4 行设为 2,将第 5 行设为 3。

最佳答案

当且仅当您的 Serieslist已排序(否则,请参见下文),然后您可以执行以下操作:

L = [1, 1, 2, 3]
df[df.elements.apply(lambda x: x == L.pop(0) if x in L else False)]
       elements
0         1
1         1
5         2
6         3
list.pop(i)返回并删除 list 中的值在索引 i .因为两者,elementsL , 被排序,弹出子集列表 i==0 的第一个元素 ( L )将始终出现在 elements 中相应的第一个元素处.

所以在 lambda 的每次迭代中在 elements , L会变成:
| element |       L      |   Output  |
|=========|==============|===========|
|    1    | [1, 1, 2, 3] |    True   |
|    1    |    [1, 2, 3] |    True   |
|    1    |       [2, 3] |   False   |
|    1    |       [2, 3] |   False   |
|    1    |       [2, 3] |   False   |
|    2    |       [2, 3] |    True   |
|    3    |          [3] |    True   |
|    4    |           [] |   False   | 
|    5    |           [] |   False   | 

如您所见,您的列表最后是空的,因此如果出现问题,您可以提前复制它。或者,您实际上在刚刚创建的新数据框中拥有该信息!

df.elements未排序,创建一个排序副本,在上面应用相同的 lambda 函数,但它的输出将用作原始数据帧的索引(使用值为 True 的索引):
df
   elements
0         5
1         4
2         3
3         1
4         2
5         1
6         1
7         1
8         1
cp = df.elements.copy()
cp.sort_values(inplace=True)
tmp = df.loc[cp.apply(lambda x: x == L.pop(0) if x in L else False)]
print tmp
   elements
2         3
3         1
4         2
5         1

HTH

关于pandas - 根据值(重复)提取 Pandas 数据帧的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38587936/

相关文章:

MySQL - 非常简单的加入花费的时间太长

python - 如何使用 Pandas 查找特定列具有十进制数字的行?

python - 要创建可更改的函数,取决于 Excel 等列,请在 Python Pandas 中双击鼠标左键

python - 在 ARIMA 时间序列建模中提取 Adfuller 测试(平稳性测试)列表中的 p 值 python pandas

indexing - 使用 Liquibase 创建具有降序键列的索引

r - 基准测试 data.frame (base)、data.frame(package dataframe) 和 data.table

python - 在 Pandas 中创建指定列类型的空数据框

php - mysql添加索引结果报错

python - 计算数据框中两列中作为相反对存在的唯一值的数量?

r - R:返回具有多个列的data.frame的pmin或pmax