我正在尝试在python中组织具有以下伪结构的熊猫数据框(为了便于理解,我更改了变量名):
什么代码可以拆分col_1中的列表,以便仅保留该列的单个字符串,并且col 2中存在的这些单个字符串的计数会根据从具有列表的行中获取的值进行调整。也就是说,对于上面的第1行,将第2行和第6行中的a的值添加到当前3中,以得出'a | 12'[that 3 + 6 + 3]。
最终数据框应如下所示:
此数据帧中有189行,因此在组织此类数据时,我无法使用期望我为所述数据标识“ a”,“ b”甚至“ a,b”的代码。 col_1是已识别的字符串或列表,而col_2是col_1中每个值的实例计数。如果此值出现在列表中而不是单独出现,则此代码也应创建一个新的单个值。也就是说,对于上述情况,如果第7行具有a,e,则a将使“ a”上的col_2计数增加1,而另一行将以“ e | 1”和随后出现的“ e | 1”添加到数据帧的底部e”应按照以上说明添加。
答案 0 :(得分:0)
如果这样的结构使用col_1中的列表:
df = pd.DataFrame({'col_1':[['a'],[*'ab'],['c'],[*'bc'],['d'],[*'acd']]
,'col_2':[3,6,1,5,1,3]})
然后您可以使用explode
,groupby
和sum
:
df.explode('col_1').groupby('col_1')['col_2'].sum()
输出:
col_1
a 12
b 11
c 9
d 4
Name: col_2, dtype: int64
如果co1_1是用逗号分隔的字符串,请在前面添加以下语句:
df['col_1'] = df['col_1'].str.split(',')
df.explode('col_1').groupby('col_1')['col_2'].sum()
输出:
col_1
a 12
b 11
c 9
d 4
Name: col_2, dtype: int64