首页 > 解决方案 > 用一行中的项目数转换新列

问题描述

我有一个数据框,其中的项目用逗号分隔。我想用一行中每个项目的计数来转换一个新列。

df = pd.DataFrame({'A' : [['one', 'two', 'three' ],
                          ['four', 'five', 'six', 'seven']
                         ]})

在此处输入图像描述

对于第一行,我想返回 3,接下来的 4 并转换一个新列。我试过:

df.A[0].count(',') + 1

那会给我第一行的计数,但是如何用计数转换新列?

标签: pythondataframe

解决方案


您需要做的实际上是创建一个您想要的值列表,并将其分配给这个新列。

这可以使用这样的列表理解来完成:

# This will assign the lengths of the lists to a column called 'count'
df['count'] = [len(l) for l in df['A']]

您也可以使用 pandas 自己的apply方法,或者直接对 Series:

df['count'] = df['A'].apply(lambda x: len(x))

或应用于整行,如果需要,这将允许您访问其他列的值:

df['count'] = df.apply(lambda x: len(x['A']), axis=1)

当您的尝试显示您计算逗号时,我假设列中的值是字符串,而不是列表。我会检查这是否是预期的行为,如果不是,则将字符串转换为列表。如果您只想计算逗号,您可以像这样应用您的方法:

df['count'] = df.apply(lambda x: x.A.count(',') + 1, axis=1)

推荐阅读