GVKun编程网logo

Pandas:根据特定列的值计数选择行(pandas 根据某列的值筛选)

17

如果您对Pandas:根据特定列的值计数选择行感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Pandas:根据特定列的值计数选择行的详细内容,我们还将为您解答pandas根

如果您对Pandas:根据特定列的值计数选择行感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Pandas:根据特定列的值计数选择行的详细内容,我们还将为您解答pandas 根据某列的值筛选的相关问题,并且为您提供关于linux 中实现根据特定列的重复项提取数据、MYSQL根据特定列选择多个列、Pandas / Python:根据另一列中的值设置一列的值、pandas 数据框中 2 列的值计数的有价值信息。

本文目录一览:

Pandas:根据特定列的值计数选择行(pandas 根据某列的值筛选)

Pandas:根据特定列的值计数选择行(pandas 根据某列的值筛选)

从pandas数据框中选择所有行的最简单方法是什么?谁的符号在整个表中恰好出现两次?例如,在下表中,我想选择在[‘b’,’e’]中带有sym的所有行,因为这些符号的value_counts等于2。

df=pd.DataFrame({''sym'':[''a'', ''b'', ''b'', ''c'', ''d'',''d'',''d'',''e'',''e''],''price'':np.random.randn(9)})                     price sym    0              -0.0129   a    1              -1.2940   b    2               1.8423   b    3              -0.7160   c    4              -2.3216   d    5              -0.0120   d    6              -0.5914   d    7               0.6280   e    8               0.5361   edf.sym.value_counts()Out[237]: d    3e    2b    2c    1a    1

答案1

小编典典

我认为您可以groupby按列symfilter值使用length == 2

print df.groupby("sym").filter(lambda x: len(x) == 2)      price sym1  0.400157   b2  0.978738   b7 -0.151357   e8 -0.103219   e

第二个解决方案使用isin与布尔索引:

s = df.sym.value_counts()print s[s == 2].indexIndex([u''e'', u''b''], dtype=''object'')print df[df.sym.isin(s[s == 2].index)]      price sym1  0.400157   b2  0.978738   b7 -0.151357   e8 -0.103219   e

并用最快的解决方案transformbooleanindexing

print (df[df.groupby("sym")["sym"].transform(''size'') == 2])    price sym1 -1.2940   b2  1.8423   b7  0.6280   e8  0.5361   e

linux 中实现根据特定列的重复项提取数据

linux 中实现根据特定列的重复项提取数据

 

001、

(base) root@PC1:/home/test3# ls
a.txt
(base) root@PC1:/home/test3# cat a.txt         ## 测试数据
1       aa
2       bb
3       aa
4       cc
5       dd
6       cc
7       kk
8       aa
9       kk                                      ## 根据第二列的重复项筛选数据
(base) root@PC1:/home/test3# cut -f 2 a.txt | sort | uniq -d | while read i; do awk -v a=$i '$2 == a' a.txt >> result; done
(base) root@PC1:/home/test3# ls
a.txt  result
(base) root@PC1:/home/test3# cat result       ## 结果文件
1       aa
3       aa
8       aa
4       cc
6       cc
7       kk
9       kk

 

002、R语言实现

 

dir()
dat <- read.table("a.txt")                                ## 测试数据
dat
id <- unique(dat[,2][duplicated(dat[,2])])                ## 提取重复id
id
dat[dat$V2 %in% id,]                                      ## 提取重复数据

 

 

003、python实现

(base) root@PC1:/home/test3# ls
a.txt  test.py
(base) root@PC1:/home/test3# cat a.txt            ## 测试数据
1       aa
2       bb
3       aa
4       cc
5       dd
6       cc
7       kk
8       aa
9       kk
(base) root@PC1:/home/test3# cat test.py          ## 测试程序
#!/usr/bin/python
in_file = open("a.txt", "r")
out_file = open("result.txt", "w")

lines = in_file.readlines()
list1 = []
for i in lines:
    i = i.strip().split()
    list1.append(i[-1])
set1 = set()
for i in list1:
    if list1.count(i) > 1:
        set1.add(i)
for i in lines:
    i = i.strip().split()
    for j in set1:
        if i[-1] == j:
            out_file.write("\t".join(i) + "\n")

in_file.close()
out_file.close()
(base) root@PC1:/home/test3# python test.py        ##  执行程序
(base) root@PC1:/home/test3# ls
a.txt  result.txt  test.py
(base) root@PC1:/home/test3# cat result.txt         ## 结果文件
1       aa
3       aa
4       cc
6       cc
7       kk
8       aa
9       kk

 

MYSQL根据特定列选择多个列

MYSQL根据特定列选择多个列

我想做一个SELECT请求,根据PLATFORM值,设法获得2列VALUE(DESKTOP& MOBILE).

这是一个示例表:

+----+---------+------+----------+-------+
| ID | PROJECT | NAME | PLATFORM | VALUE |
+----+---------+------+----------+-------+
|  1 |       1 | Foo  | desktop  |     1 |
|  2 |       1 | Foo  | mobile   |    42 |
|  3 |       1 | Bar  | desktop  |     3 |
|  4 |       1 | Bar  | mobile   |    10 |
|  5 |       2 | Foo  | desktop  |     2 |
|  6 |       2 | Bar  | mobile   |     9 |
+----+---------+------+----------+-------+

期望的输出:

+---------+------+---------+--------+
| PROJECT | NAME | DESKTOP | MOBILE |
+---------+------+---------+--------+
|       1 | Foo  | 1       | 42     |
|       1 | Bar  | 3       | 10     |
|       2 | Foo  | 2       | NULL   |
|       2 | Bar  | NULL    | 9      |
+---------+------+---------+--------+

我尝试了什么:

SELECT project,name,(CASE platform WHEN 'desktop' THEN value END) AS "desktop",(CASE platform WHEN 'mobile' THEN value END) AS "mobile"
FROM test
GROUP BY name,project
ORDER BY project,value ASC

+---------+------+---------+--------+
| project | name | desktop | mobile |
+---------+------+---------+--------+
|       1 | Foo  | 1       | NULL   |
|       1 | Bar  | 3       | NULL   |
|       2 | Foo  | 2       | NULL   |
|       2 | Bar  | NULL    | 9      |
+---------+------+---------+--------+
最佳答案
试试这个:

SELECT project,NAME,MAX(desktop) AS desktop,MAX(mobile) AS mobile FROM (
    SELECT project,(CASE platform WHEN 'desktop' THEN VALUE END) AS "desktop",(CASE platform WHEN 'mobile' THEN VALUE END) AS "mobile"
    FROM test
    ) AS aa
GROUP BY aa.NAME,aa.project
ORDER BY aa.project

说明:

首先,您可以选择(aa)所有数据,根据平台内容扩展价值.

然后使用该选择作为分组数据的原点.

结果:

project name   desktop mobile
1       Foo       1       42
1       Bar       3       10
2       Foo       2       NULL
2       Bar       NULL    9

Pandas / Python:根据另一列中的值设置一列的值

Pandas / Python:根据另一列中的值设置一列的值

我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑:

if df['c1'] == 'Value':
    df['c2'] = 10
else:
    df['c2'] = df['c3']

我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。

如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息:

ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().

pandas 数据框中 2 列的值计数

pandas 数据框中 2 列的值计数

如何解决pandas 数据框中 2 列的值计数?

我有一张以下格式的表格。我想做两列(年份和操作)的值计数并获得它们的百分比。 例如,在“2014”年,值“是”出现了 3 次中的 2 次,因此 2/3 = 0.66。我尝试使用 value_counts 但它没有产生以下结果。 任何线索将不胜感激。

var x = [6,4,3]; //pre-defined values
var n = 24; //the number I want to add too

function myFunc(values,goal) {
    //code for algorithm
    //return a sequence of numbers from the list that add to 24
}

myFunc(x,n)

解决方法

让我们尝试使用 SeriesGroupBy.value_counts 并设置 normalize=True 以获取百分比值:

out = df.groupby(''year'')[''operation''].value_counts(normalize=True)

out

year  operation
2014  yes          0.666667
      no           0.333333
2015  yes          0.666667
                   0.333333
Name: operation,dtype: float64

还可以将 sort=False 设置为不按每级 0 的最高值排序:

out = df.groupby(''year'')[''operation''].value_counts(normalize=True,sort=False)

out

year  operation
2014  no           0.333333
      yes          0.666667
2015               0.333333
      yes          0.666667
Name: operation,dtype: float64

Series.reset_index 可以与 name= 一起使用以创建 DataFrame 而不是 Series 并为未命名的值列命名:

new_df = (
    df.groupby(''year'')[''operation''].value_counts(normalize=True)
        .reset_index(name=''freq'')
)
   year operation      freq
0  2014       yes  0.666667
1  2014        no  0.333333
2  2015       yes  0.666667
3  2015            0.333333

使用的数据帧:

df = pd.DataFrame({''year'': [2014,2014,2015,2015],''operation'': [''yes'',''yes'',''no'','''',''yes'']})

关于Pandas:根据特定列的值计数选择行pandas 根据某列的值筛选的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于linux 中实现根据特定列的重复项提取数据、MYSQL根据特定列选择多个列、Pandas / Python:根据另一列中的值设置一列的值、pandas 数据框中 2 列的值计数的相关知识,请在本站寻找。

本文标签: