熊猫-逗号分隔行中的每个字符串在数据帧中出现的频率

时间:2019-04-09 15:27:38

标签: python pandas dataframe

我正在使用包含两列的DataFrame,其中一列包含逗号分隔的字符串,第二列包含整数。我想用字符串遍历列,保存每行中的每个唯一字符串,将第二列中的整数值分配给每个字符串。换句话说,

A           B
a,b,c,d     0
a,b,c,d     10
a,b,d,e     89
a,b,d,e     111

在此示例中:

a = 220, b = 220, c = 10, d = 220, e = 210

我正在从csv文件中选择有趣的列,

revcat = DataFrame(data, columns = ['Tag', 'Revenue']) 

这使ndarray在“ Tag”中具有唯一值,并将其转换为另一个DataFrame。

uniqtag = rev1.Tag.str.split(",").apply(pd.Series).stack().unique()
tag_stack = pd.DataFrame(uniqtag)

我被困在这里。基于此,如何使用找到的唯一字符串遍历原始“标签”列,并将“收入”列中的值求和到每个“标签”?

2 个答案:

答案 0 :(得分:3)

您可以使用Series.str.get_dummiesSeries.mulSeries.sum

df['A'].str.get_dummies(sep=',').mul(df['B'], axis=0).sum()

a    210
b    210
c     10
d    210
e    200

说明

df.A.str.get_dummies(sep=',')

这将产生一个如下所示的DataFrame:

   a  b  c  d  e
0  1  1  1  1  0
1  1  1  1  1  0
2  1  1  0  1  1
3  1  1  0  1  1

然后将.mul与您的value列一起使用将产生:

     a    b   c    d    e
0    0    0   0    0    0
1   10   10  10   10    0
2   89   89   0   89   89
3  111  111   0  111  111

最后,沿索引轴应用.sum将为您提供最终输出:

a    210
b    210
c     10
d    210
e    200

答案 1 :(得分:1)

这是我要使用的步骤

  1. 拆分为“,”,然后使用Home返回一个数据框,其中每个字母都位于其自己的列中(根据您的示例,我现在假设您始终具有相同的分割数?是真的吗?)

  2. “融合”该数据框,以便在原始df中没有从每行创建多列的情况,而是有一个长数据框,其中每一行是一个字母,其索引在原始df中。

  3. 从索引转换为expand=True列中的值

  4. 按字母和B上的总和分组。

B

注意-我认为您的问题中的总和不正确;他们中的一些人似乎要过10点了。