python-3.x - 将包含集合的数据框列的每一行转换为包含列表的列

标签 python-3.x pandas

我有一个数据框 df1,看起来像这样:

cpc         count   gau
F21S41/32   5       {2875}
F21S41/147  21      {2875}
F21S41/692  20      {2875}
B60Q1/0041  15      {2683, 2875, 2844}
F21S43/40   15      {2875}
F21S41/435  14      {2875}

对于每一行,我想将计数乘以 gau 以生成一个名为 w_gau 的新列。

最终,我希望 df1 看起来像这样:

cpc         count   gau                 w_gau
F21S41/32   5      {2875}               ['2875', '2875', '2875', '2875', '2875'] 
F21S41/147  3      {2875}               ['2875', '2875', '2875']
F21S41/692  2      {2875}               ['2875', '2875']
B60Q1/0041  2      {2683, 2875, 2844}   ['2683', '2875', '2844', '2683', '2875', '2844', '2683', '2875', '2844']
F21S43/40   3      {2875}               ['2875', '2875', '2875']
F21S41/435  4      {2875}               ['2875', '2875', '2875', '2875']

我已经有了将列表展平为单个列表并计算每个字符串出现次数的代码。

我的问题是如何将 df1 中的 gau 转换为可以乘以整数的列表列表?

我试过:

In [16]: df1.gau.tolist()

但这会将列中的所有内容转换为一个列表。我需要每一行包含一个列表,每个字符串或 int 是列表中的一个字符串。

编辑:gau 是一个字符串,而不是一个整数

df1.dtypes
Out[24]: 
cpc      object
count     int64
gau      object
w_gau    object
dtype: object

最佳答案

当你在做这样愚蠢的事情时,你应该停下来重新考虑你的方法。

也就是说,你要了剪刀,它们就在这里

df['gau'].apply(list) * df['count']

作为一个新的列

df.assign(w_gau=df['gau'].apply(list) * df['count'])

如果您的 gau 列是字符串,请运行此命令将它们转换为集合。

from ast import literal_eval

df['gau'] = df['gau'].apply(literal_eval)

然后运行其他代码。

关于python-3.x - 将包含集合的数据框列的每一行转换为包含列表的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51843266/

相关文章:

python - 计算在给定时间点打开的旧票

excel - 以多个名称保存一个 excel 文件

python - 将多个 Bokeh HoverTool 实例与模型 API 一起使用

python - 偏移数据框引用的最Pythonic方法?

python - 如何使用 Pandas 从一个文件中读取多个数据集?

python - 如何根据频率对文本列进行分类

python - 如何在分组条形图中为条形着色

python - 如何使用 isinstance 测试所有可能的整数类型

python - 假设 `obj` 的类型为 `objtype` ,那么 `super(cls,obj)` 和 `super(cls,objtype)` 是否相同?

python - 如何在 Tkinter 应用程序上收听终端?