【问题标题】:Pandas: Select first occurrence when defining a value_count() intPandas:定义 value_count() int 时选择第一次出现
【发布时间】:2021-10-01 10:21:11
【问题描述】:

我想知道如何在 value_count() 等于某个值的数据框中选择第一个观察值。

我尝试了以下方法:

trip_id_value_count = trip_df["trip_id"].value_counts()

trip1 = trip_df[(trip_id_value_count == 378)]

但是,我得到了错误:

IndexingError:作为索引器提供的不可对齐布尔系列(布尔系列的索引与索引对象的索引不匹配)。

由于值计数可以重复,我想保留它的第一次出现。我的最终目标是提取观察量不同的不同行程。例如,这次旅行 1 将有 378 个观察值。其他人可能有 121、50 等等...

我期望的输出是一个数据框,其中包含该trip_id 的所有具有所选值计数的行。例如,如果trip_id 626xy83m 的值计数为378,并且它是数据帧中显示的第一个具有该值计数的trip_id,我想将其提取为数据帧并将其存储在trip1中。

【问题讨论】:

  • 如果您在预期结果中包含示例数据框将会很有帮助。
  • 我编辑了问题

标签: python pandas dataframe indexing count


【解决方案1】:

测试数据框:

import pandas as pd
import numpy as np

trip_df = pd.DataFrame()
trip_df["trip_id"] = np.random.randint(1,10, 10_000)

然后我在数据框中生成一个 value_counts 列

trip_df["value_counts"] = trip_df["trip_id"].map(trip_df["trip_id"].value_counts())

在这种情况下,我得到:

      trip_id  value_counts
0           4          1155
1           3          1135
2           5          1119
3           8          1111
4           9          1124
...       ...           ...
9995        7          1051
9996        4          1155
9997        3          1135
9998        1          1073
9999        2          1080

[10000 rows x 2 columns]

然后你可以过滤数据框:

trip_df[trip_df["value_counts"] == 1155].head(1)

输出:

   trip_id  value_counts
0        4          1155

【讨论】:

    【解决方案2】:

    IIUC:

    trip_id_378 = trip_id_value_count[trip_id_value_count == 378].index[0]
    
    trip1 = df_trip.loc[df_trip['trip_id'] == trip_id_378]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2012-08-17
      • 2015-06-15
      • 1970-01-01
      • 2023-03-27
      • 2023-01-08
      相关资源
      最近更新 更多