我正在使用包含两列的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)
我被困在这里。基于此,如何使用找到的唯一字符串遍历原始“标签”列,并将“收入”列中的值求和到每个“标签”?
答案 0 :(得分:3)
您可以使用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
与您的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)
这是我要使用的步骤
拆分为“,”,然后使用Home
返回一个数据框,其中每个字母都位于其自己的列中(根据您的示例,我现在假设您始终具有相同的分割数?是真的吗?)
“融合”该数据框,以便在原始df中没有从每行创建多列的情况,而是有一个长数据框,其中每一行是一个字母,其索引在原始df中。
从索引转换为expand=True
列中的值
按字母和B
上的总和分组。
B
注意-我认为您的问题中的总和不正确;他们中的一些人似乎要过10点了。