簡體   English   中英

Python:從DataFrame列中提取數組

[英]Python: extracting arrays from DataFrame column

我正在嘗試從DataFrames中提取數據作為單獨的NumPy數組,以傳遞給SciPy stats方法。

示例數據框:

userId  numCol
147     1.3 
222     2.6
389     5.7 
443     1.2 
222     2.4
678     2.1
443     1.8
501     2.1
147     1.2
501     3.2
678     1.3
389     2.4

對於6個唯一的userId,假設我只想為userId的numCol和443的numCol值提取4個單獨的數組。

輸出如下所示:

數組名稱147: array([1.3, 1.2)]
數組名稱222: array([2.6, 2.4)]
數組名稱389: array([5.7, 2.4)]
數組名稱443: array([1.2, 1.8)]

我不知道是否最好的方法是創建用戶id就是我想要的清單,然后通過數據幀循環利用大熊貓isin和NumPy的values

我已經仔細研究了這個類似的問題 ,但事實並非如此。

您可以使用類似df[df.userId == 147]方式獲取與特定userId對應的行。 因此,如果您有所需的userId列表,則可以執行以下操作:

for userId in userIds_to_check:
    stats.anderson(df[df.userId == userId].numCol)

(或您想調用的任何函數而不是anderson )。 注意,通常您不需要獲取普通的numpy數組; 您可以在pandas Series上調用大多數統計信息功能,它們會正常工作。 如果出於某種原因確實希望使用簡單的numpy數組,則可以執行df[df.userId == userId].numCol.values

根據您的操作,您可能只想使用groupby ,這將使您可以將函數映射到每個userId組,例如:

>>> df.groupby('userId').numCol.apply(stats.skew)

userId
147    0.000000e+00
222    0.000000e+00
389    3.954380e-16
443    0.000000e+00
501   -1.251190e-15
678   -8.673617e-16
Name: numCol, dtype: float64

在這里,我通過對每個組應用stats.skew來一次計算每個userId的numCol值的偏度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM