关于如何计算熊猫数据帧中关键字的频率的问题



假设我有一个数据帧,其中某些条目是数组/列表/集:

Row 0 [a, d, g, h, j] 
Row 1 [d, j, a, p]    
Row 2 [c, f, t, a]    
Row 3 [a, h]
Row 4 []
Row 5 [d, j]

我想将其转换为 df,其中我们将数组条目映射到其出现的总频率(仅在该列中(:

a c d f g h j p
4 1 3 1 1 2 3 1

我该怎么做?(条形图需要它(。

现在假设数据帧有另一列:

Row 0 [a, d, g, h, j] 100
Row 1 [d, j, a, p]    300
Row 2 [c, f, t, a]    200
Row 3 [a, h]          160
Row 4 []               40    
Row 5 [d, j]          600

如果我想获取每个数组条目 col 2 的平均值,我将如何做?澄清一下,我想要:

a (100 + 300 + 200 + 160)/4 = 760/4 = 190
c 200/1 = 200
d (100 + 300)/2 = 200
f 200
... etc

谢谢,我现在正在学习熊猫,这真的很有趣,但也不是微不足道的。

使用推断的设置:

设置:

data=[
["Row 0", list("adghj"), 100],
["Row 1", list("djap"), 300],
["Row 2", list("cfta"), 200],
["Row 3", list("ah"), 160],
["Row 4", [], 40],
["Row 5", list("dj"), 600]
]
import pandas as pd
df=pd.DataFrame(data, columns=["id", "wrds", "val"])

两个问题的解决方案:

df=df.explode("wrds")[["wrds", "val"]].groupby("wrds").agg(["count", "mean"])

输出:

val
count        mean
wrds
a        4  190.000000
c        1  200.000000
d        3  333.333333
f        1  200.000000
g        1  100.000000
h        2  130.000000
j        3  333.333333
p        1  300.000000
t        1  200.000000

首先,让我们重新创建数据帧:

import pandas as pd
df = pd.DataFrame({
'Rows': ['Row 0','Row 1','Row 2','Row 3','Row 4','Row 5'],
'Letters': [['a', 'd', 'g', 'h', 'j'], ['d', 'j', 'a', 'p'], ['c', 'f', 't', 'a'], ['a', 'h'], [], ['d', 'j']],
'Values': [100, 300, 200, 160, 40, 600]
})

收益 率:

Rows          Letters  Values
0  Row 0  [a, d, g, h, j]     100
1  Row 1     [d, j, a, p]     300
2  Row 2     [c, f, t, a]     200
3  Row 3           [a, h]     160
4  Row 4               []      40
5  Row 5           [d, j]     600

现在,我们可以使用explode()将您的list类型列转换为单独的行并解决您的第一个问题:

df['Letters'].explode().value_counts().sort_index()

收益 率:

a    4
c    1
d    3
f    1
g    1
h    2
j    3
p    1
t    1

对于第二部分,我将参考@GrzegorzSkibinski的答案,即我如何处理这个问题。他的解决方案有效地结合了您帖子中的两个问题:

df.explode('Letters').groupby('Letters').agg({'Values': 'mean'})

收益 率:

Values
Letters            
a        190.000000
c        200.000000
d        333.333333
f        200.000000
g        100.000000
h        130.000000
j        333.333333
p        300.000000
t        200.000000

最新更新