如何在混合有字符串和字符串列表的特定列中分隔包含列表的单元格?
How to separate cells containing lists in a specific column that has a mixture of strings and lists of strings?
我正在尝试在 python 中组织一个 pandas 数据框,它具有以下伪结构(为了便于理解,我更改了变量名称):
Initial_df
什么代码能够拆分 col_1 中的列表,以便此列仅保留单个字符串,并且第 2 列中存在的这些单个字符串的计数会根据从带列表的行中获得的值进行调整。即对于上面的第 1 行,将第 2 行和第 6 行的 a 的值添加到当前的 3 中,得到 'a | 12' [thats 3 + 6 + 3].
最终数据框应如下所示:
output_df
此数据框中有 189 行,因此我不能使用要求我在这样组织数据时为所述数据识别“a”、“b”甚至“a,b”的代码。 col_1 是字符串或已识别的列表,col_2 是 col_1 中每个值的实例计数。如果此值出现在列表中但不是单独存在,则此代码还应该可以创建一个新的单独值。即对于上面的内容,如果第 7 行有 a,e,则 a 会将“a”的 col_2 计数增加 1,另一行将使用“e | 1”添加到数据框的底部,并且后续出现的“e”应该按照除此之外的描述进行添加。
如果使用 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
我正在尝试在 python 中组织一个 pandas 数据框,它具有以下伪结构(为了便于理解,我更改了变量名称):
Initial_df
什么代码能够拆分 col_1 中的列表,以便此列仅保留单个字符串,并且第 2 列中存在的这些单个字符串的计数会根据从带列表的行中获得的值进行调整。即对于上面的第 1 行,将第 2 行和第 6 行的 a 的值添加到当前的 3 中,得到 'a | 12' [thats 3 + 6 + 3].
最终数据框应如下所示:
output_df
此数据框中有 189 行,因此我不能使用要求我在这样组织数据时为所述数据识别“a”、“b”甚至“a,b”的代码。 col_1 是字符串或已识别的列表,col_2 是 col_1 中每个值的实例计数。如果此值出现在列表中但不是单独存在,则此代码还应该可以创建一个新的单独值。即对于上面的内容,如果第 7 行有 a,e,则 a 会将“a”的 col_2 计数增加 1,另一行将使用“e | 1”添加到数据框的底部,并且后续出现的“e”应该按照除此之外的描述进行添加。
如果使用 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