python - 使用计数将条件排除应用于 Pandas DataFrame

标签 python python-2.7 pandas

我在 pandas 中有以下 DataFrame:

import pandas as pd
example_data = [{'ticker': 'aapl', 'loc': 'us'}, {'ticker': 'mstf', 'loc': 'us'}, {'ticker': 'baba', 'loc': 'china'}, {'ticker': 'ibm', 'loc': 'us'}, {'ticker': 'db', 'loc': 'germany'}]
df = pd.DataFrame(example_data)
print df

loc ticker
0       us   aapl
1       us   mstf
2    china   baba
3       us    ibm
4  germany     db

我想创建一个新的 DataFrame,以便从原始 df 创建每一行,但排除 loc 计数大于 2 的行。也就是说,新的 df 是通过循环旧的 df、计算之前出现的 loc 行数并根据此计数包含/排除行来创建的。

以下代码给出了所需的输出。

country_counts = {}
output = []
for row in df.values:
    if row[0] not in country_counts:
        country_counts[row[0]] = 1
    else:
        country_counts[row[0]] +=1
    if country_counts[row[0]] <= 2:
        output.append({'loc': row[0], 'ticker': row[1]})
new_df = pd.DataFrame(output)   
print new_df

loc ticker
0       us   aapl
1       us   mstf
2    china   baba
3  germany     db

输出排除了原始 df 中的第 4 行,因为它的 loc 计数大于 2(即 3)。

是否存在更好的方法来执行此类操作?非常感谢任何帮助。

最佳答案

groupby 和 .head 怎么样:

In [90]: df.groupby('loc').head(2)
Out[90]: 
       loc ticker
0       us   aapl
1       us   mstf
2    china   baba
4  germany     db

此外,请注意列名,因为 loc.loc 方法冲突。

关于python - 使用计数将条件排除应用于 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247529/

相关文章:

python - 使用 find 方法查找完全匹配

python - Pandas 日期列减法

python - 改进基于其他值映射数据框中某些元素的性能

python - PyBrain 网络中所有节点的激活值

python - 使用 Python 直接从 zip 文件中读取 xml 文件

python - python 可以一次在浏览器中打开多个选项卡吗?

Python pandas - value_counts 无法正常工作

python - 根据条件在数据框 pandas 中创建列

python - 区分文件名和文件路径

python - 索引如何在具有重复项的列表中工作?