首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据现有数字列、字符串列表作为列名和元组列表作为值,在数据框架中创建新列。

根据现有数字列、字符串列表作为列名和元组列表作为值,在数据框架中创建新列。
EN

Stack Overflow用户
提问于 2020-02-28 15:53:17
回答 3查看 68关注 0票数 2

我有一个包含数字列的数据框架,我有一个元组列表和一个字符串列表。元组列表表示应该添加的值,其中该列表中的每个索引对应于数据帧中的数字列。字符串列表表示要添加的列的名称。

示例:

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'number':[0,0,1,1,2,2,3,3]})

# a list of keys and a list of tuples
keys = ['foo','bar']
combinations = [('99%',0.9),('99%',0.8),('1%',0.9),('1%',0.8)]

预期产出:

代码语言:javascript
运行
复制
   number  foo  bar
0       0  99%  0.9
1       0  99%  0.9
2       1  99%  0.8
3       1  99%  0.8
4       2   1%  0.9
5       2   1%  0.9
6       3   1%  0.8
7       3   1%  0.8
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-28 15:58:03

原始员额

要获得输出,只需尝试

代码语言:javascript
运行
复制
df2 = pd.DataFrame(combinations, columns = keys)
pd.concat([df, df2], axis=1)

回传

代码语言:javascript
运行
复制
   number   foo   bar
0       0   99%   0.9
1       1   99%   0.8
2       2   1%    0.9
3       3   1%    0.8

编辑

根据您的新需求,您可以使用以下内容

代码语言:javascript
运行
复制
df.set_index('number', inplace=True)
df = df.merge(df2, left_index = True, right_index=True)
df = df.reset_index().rename(columns={'index':'number'})

这也适用于不同的重复数量,即

代码语言:javascript
运行
复制
df = pd.DataFrame({'number':[0,0,1,1,1,2,2,3,3,3]})

返回

代码语言:javascript
运行
复制
   number   foo   bar
0       0   99%   0.9
1       0   99%   0.9
2       1   99%   0.8
3       1   99%   0.8
4       1   99%   0.8
5       2   1%    0.9
6       2   1%    0.9
7       3   1%    0.8
8       3   1%    0.8
9       3   1%    0.8
票数 2
EN

Stack Overflow用户

发布于 2020-02-28 16:00:09

您可以在for循环中使用列表理解,我认为这是一种非常快速和简单的方法:

代码语言:javascript
运行
复制
for i in range(len(keys)):
    df[keys[i]] = [x[i] for x in combinations]

输出:

代码语言:javascript
运行
复制
   number  foo  bar
0       0  99%  0.9
1       1  99%  0.8
2       2   1%  0.9
3       3   1%  0.8
票数 1
EN

Stack Overflow用户

发布于 2020-02-28 17:11:50

我找到了一个解决方案:

代码语言:javascript
运行
复制
df_new = pd.DataFrame()

for model_number,df_subset in df.groupby('number'):

    for key_idx,key in enumerate(keys):
        df_subset[key] = combinations[model_number][key_idx]

    df_new = df_new.append(df_subset)

但对我来说,这似乎很“肮脏”,也许有更好、更有效的解决方案?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60455173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档