gpt4 book ai didi

python - 计算 pandas.loc 搜索的结果数

转载 作者:行者123 更新时间:2023-11-28 17:39:54 26 4
gpt4 key购买 nike

我有一个包含两列“user”(userid)和“TS”(时间戳)的 pandas DataFrame。

>>> print rawData
<class 'pandas.core.frame.DataFrame'>
Int64Index: 74883 entries, 0 to 74882
Data columns (total 2 columns):
TS 74883 non-null values
user 74883 non-null values
dtypes: float64(1), object(1)

我已确保数据框已在“用户”字段中建立索引。

>>> indexedDataFrame = rawData.set_index('user')

现在我可以获得用户的时间戳列表。

>>> indexedDataFrame.loc['user1','TS']
user
user1 1423217959.064690
user1 1423217959.204906
user1 1423217959.324809
...
user1 1423220404.366348
user1 1423221013.064749
Name: TS, Length: 3151, dtype: float64

这使我可以通过计算该用户的条目数来找到该用户的条目数数组中的条目数。

>>> indexedDataFrame.loc['user1', 'TS'].count()
3151

到目前为止一切顺利。当只有一个条目时会出现问题用户。在那种情况下,pandas 大概是为了让用户更容易,返回直接输入而不是具有一个值的数组。不幸的是,这意味着计数操作失败,因为您不能在 float 上调用 count()。

>>> indexedDataFrame.loc['user15', 'TS']
1423217968.5711029

>>> indexedDataFrame.loc['user15', 'TS'].count()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-259-8712c5fa66de> in <module>()
----> 1 indexedDataFrame.loc['user15', 'TS'].count()

AttributeError: 'numpy.float64' object has no attribute 'count'

所以这意味着如果我想写一个函数来计算每个用户的时间戳,我必须执行以下操作:

def findEventCounts():
userCountMap = {}
for user in distinctUsers:
print "Counting entries for user %s" % user
searchResult = indexedDataFrame.loc[user, 'TS']
try:
userCount = searchResult.count()
except AttributeError:
userCount = 1
print user, userCount
userCountMap[user] = userCount
return userCountMap

又蠢又丑。

不幸的是,这种返回值而不是数组的行为单个条目实际上也出现在 pandas 文档中,所以我很确定这是预期的行为。

(参见 http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label 中的最后一个示例,

# this is also equivalent to ``df1.at['a','A']``
In [44]: df1.loc['a','A']
Out[44]: -1.7769037169718671

)

是否有解决方法,或者我真的必须像上面那样编写丑陋的代码来使用 Pandas ?如果是后者,我不会使用 pandas...:)

最佳答案

您可以传递一个单元素列表作为索引以强制它返回一个系列,即使只有一个匹配:

indexedDataFrame.loc[['user1'], 'TS']

(您也可以使用多元素列表一次获取多个索引,例如,indexedDataFrame.loc[['user1', 'user2'], 'TS'] 获取所有两个用户的行。)

关于python - 计算 pandas.loc 搜索的结果数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com