使用熊貓按條件對數據進行分組

丹尼

我有一個條目數據框'Indata2',我必鬚根據'Indata ['標籤']'對其數據進行分組,生成一個名為'Indicator'的新列,我已經有了它,我應該做的是更正最後一列a小的 。

import pandas as pd   
indata2 = [[2,  'SIS X+',      9.65,    'Q'],
          [2,   'SIS X-',      5.32,    'Q'],
          [2,   'SIS Y+',      8.24,    'Q'],
          [2,   'SIS Y-',      3.27,    'Q'],
          [2,   'SIS',        3.40, 'Q'],
          [2,   'C. VIV',      0.23,    'L'],
          [2,   'SOBRE P',  0.38,   'SD'],
          [2,   'SOBRE P',  0.19,   'SD'],
          [2,   'VIEN X+',  7.36,   'W'],
          [2,   'VIEN X-',  23.09,  'W'],
          [2,   'VIEN Y+',  6.66,   'W'],
          [2,   'VIEN Y-',  2.68,   'W'],
          [4,   'SIS X+',      14.41,   'Q'],
          [4,   'SIS X-',      12.23,   'Q'],
          [4,   'SIS Y+',      10.00,   'Q'],
          [4,   'SIS Y-',      11.00,   'Q'],
          [4,   'C. VIV',      0.38,    'L'],
          [4,   'C. VIV',      0.34,    'L'],
          [4,   'C. VIV',      0.13,    'L'],
          [4,   'SOBRE P',  0.62,   'SD'],
          [4,   'VIEN X+',  29.21,  'W'],
          [4,   'VIEN X-',  8.70,   'W'],
          [4,   'VIEN Y-',  7.46,   'W'],
          [4,   'VIEN Y+',  11.62,  'W'],
          [4,   'VIEN',      9.6,   'W']] 
indata2 = pd.DataFrame(data = indata2, columns = ['KeyData', 'Text', 'AvgAbs', 'Label'])

l = indata2.Label.unique()
m = pd.DataFrame(l, columns = ['Label'])
m['Indicator'] = m.index + 1
outputdata = indata2.merge(m[['Indicator','Label']],'left')
# Correct outputdata['Indicator'] 

為了更正我在“標籤”中的 2 個特殊標籤:“W”和“Q”。

您可以意識到對於它們中的每一個都有一個文本:對於 Q:[SIS X +, SIS X-, SIS Y +, SIS Y-] 和對於 W: [VIEN X +, VIEN X-, VIEN Y +,維恩Y-]。所有這些數據都已轉換為大寫。

然後,對於新列 'Indicator':在 'Text' 列中包含至少一個字母 'X' 的所有 'W' 值必須有一個指示符,並且當包含 'Text' 列時至少包含一個字母 'Y'其他指標,這是為了區分它們。

注意:如果 'TEXT' 列中沒有 'X' 或 'Y',則 'indicator' = 0。

結果(輸出數據)應該是:

KeyData    Text      AvgAbs  Label    Indicator
2         SIS X+       9.65      Q         1.1
2         SIS X-       5.32      Q         1.1
2         SIS Y+       8.24      Q         1.2
2         SIS Y-       3.27      Q         1.2
2         SIS          3.40      Q         0
2         C. VIV       0.23      L         2
2         SOBRE P      0.38     SD         3
2         SOBRE P      0.19     SD         3
2         VIEN X+      7.36      W         4.1
2         VIEN X-      23.09     W         4.1
2         VIEN Y+      6.66      W         4.2
2         VIEN Y-      2.68      W         4.2
4         SIS X+       14.41     Q         1.1
4         SIS X-       12.23     Q         1.1
4         SIS Y+       10.00     Q         1.2
4         SIS Y-       11.00     Q         1.2
4         C. VIV       0.38      L         2
4         C. VIV       0.34      L         2
4         C. VIV       0.13      L         2
4         SOBRE P      0.62     SD         3
4         VIEN X+      29.21     W         4.1
4         VIEN X-      8.70      W         4.1
4         VIEN Y-      7.46      W         4.2
4         VIEN Y+      11.62     W         4.2
4         VIEN         9.60      W         0
not_speshal

嘗試使用mapnumpy.select

mapper = {label: i+1 for i, label in enumerate(indata2["Label"].unique())}
indata2["Indicator"] = np.select([(indata2["Label"]=="Q")&(indata2["Text"].str.contains("X")), 
                                  (indata2["Label"]=="Q")&(indata2["Text"].str.contains("Y")), 
                                  (indata2["Label"]=="W")&(indata2["Text"].str.contains("X")), 
                                  (indata2["Label"]=="W")&(indata2["Text"].str.contains("Y")),
                                  (indata2["Label"].isin(list("QW"))&~(indata2["Text"].str.contains("[X-Y]", regex=True)))
                                 ],
                                 [mapper["Q"]+0.1, mapper["Q"]+0.2, mapper["W"]+0.1, mapper["W"]+0.2, 0],
                                 indata2["Label"].map(mapper))

>>> indata2

    KeyData     Text  AvgAbs Label  Indicator
0         2   SIS X+    9.65     Q        1.1
1         2   SIS X-    5.32     Q        1.1
2         2   SIS Y+    8.24     Q        1.2
3         2   SIS Y-    3.27     Q        1.2
4         2      SIS    3.40     Q        0.0
5         2   C. VIV    0.23     L        2.0
6         2  SOBRE P    0.38    SD        3.0
7         2  SOBRE P    0.19    SD        3.0
8         2  VIEN X+    7.36     W        4.1
9         2  VIEN X-   23.09     W        4.1
10        2  VIEN Y+    6.66     W        4.2
11        2  VIEN Y-    2.68     W        4.2
12        4   SIS X+   14.41     Q        1.1
13        4   SIS X-   12.23     Q        1.1
14        4   SIS Y+   10.00     Q        1.2
15        4   SIS Y-   11.00     Q        1.2
16        4   C. VIV    0.38     L        2.0
17        4   C. VIV    0.34     L        2.0
18        4   C. VIV    0.13     L        2.0
19        4  SOBRE P    0.62    SD        3.0
20        4  VIEN X+   29.21     W        4.1
21        4  VIEN X-    8.70     W        4.1
22        4  VIEN Y-    7.46     W        4.2
23        4  VIEN Y+   11.62     W        4.2
24        4     VIEN    9.60     W        0.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在熊貓中按週對數據透視表日期進行分組

使用分類字符串對熊貓數據框進行分組

按兩列對熊貓數據框進行分組而不對其進行匯總

對熊貓數據框列進行分組和計數

對來自熊貓數據框的連續值進行分組

根據條件(包含特定字符串)對數據進行分組

使用條件對數據框進行分區

按列值對數據進行分組

按列名按字母順序對熊貓數據框的列子集進行排序

根據條件融化熊貓數據框

按特定鍵對嵌套數組數據進行分組

PHP中根據兩個條件對多個關聯數組進行分組和排序

C# 按多個不同條件對數組進行排序

熊貓系列/數據框的條件遞減

如何使用條件更新熊貓數據框中的列表列?

熊貓根據 groupby 的條件刪除行

按部分鍵對json數據進行分組

按特定列值對數據框進行分組

按屬性對 json 數據進行分組 - vue.js

按列值對結果集數據的多行進行分組

熊貓數據框按多列分組併計算不同的值

Python:用熊貓中的句子對相似的單詞進行分組

如何對熊貓中一列的一個值進行分組?

使用熊貓數據框測試多個“IF”、“AND”、“ELIF”條件並根據結果執行代碼?

React:使用狀態對功能組件進行條件渲染 | 不是函數錯誤

按第一個字母對數組進行分組 - 使用 groupBy 方法 (Lodash)

使用 Array.reduce() 按多個鍵對數組進行分組

如何根據條件在 Python 中對數據幀進行下採樣

如何使用dplyr在R中按月對數據進行分組