为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2022-01-05 10:24:40
我正在使用包含两列的 DataFrame,其中一列包含逗号分隔的字符串,第二列包含整数。我想遍历带有字符串的列,保存每行中的每个唯一字符串,将第二列中的整数值分配给每个字符串。换句话说,A           Ba,b,c,d     0a,b,c,d     10a,b,d,e     89a,b,d,e     111在这个例子中:a = 220, b = 220, c = 10, d = 220, e = 210我正在从我的 csv 文件中选择有趣的列,revcat = DataFrame(data, columns = ['Tag', 'Revenue']) 这给了我在“标签”中具有唯一值的 ndarray 并将其转换为另一个数据帧。uniqtag = rev1.Tag.str.split(",").apply(pd.Series).stack().unique()tag_stack = pd.DataFrame(uniqtag)我被困在这里。基于此,我如何使用我找到的唯一字符串迭代原始“标签”列并将“收入”列中的值与每个“标签”相加?
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

你可以用Series.str.get_dummies,Series.mul和Series.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与您的值列一起使用将产生:


     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


查看完整回答
反对 回复 2022-01-05
?
慕的地10843

TA贡献1785条经验 获得超8个赞

这是我会使用的步骤

  1. 在“,”上拆分并用于expand=True获取数据框,其中每个字母都在其自己的列中(我现在假设,根据您的示例,您总是具有相同的拆分数量?这是真的吗?)

  2. “融化”那个数据框,这样就不用从原始 df 的每一行创建多列,你有一个长数据框,其中每一行都是一个字母,它在原始 df 中的索引。

  3. 从索引转换为B列中的值

  4. 按字母和总和分组B

import pandas as pd


data = [

    ("a,b,c,d", 0),

    ("a,b,c,d", 10),

    ("a,b,d,e", 89),

    ("a,b,d,e", 111),

]

df = pd.DataFrame(data, columns=["A", "B"])


#   A       B

# 0 a,b,c,d 0

# 1 a,b,c,d 10

# 2 a,b,d,e 89

# 3 a,b,d,e 111


melted = df.A.str.split(",", expand=True).reset_index().melt(id_vars="index", value_name="A")

melted["B"] = df.B.loc[melted["index"]].values

melted.groupby("A").B.sum()


# value

# a    210

# b    210

# c    10

# d    210

# e    200

注意 - 我认为您在问题中的总和不正确;他们中的一些人似乎在 10 点之前下班。


查看完整回答
反对 回复 2022-01-05
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号