在DataFrame Python上同时在行和列上迭代表单

2024-07-03 06:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,比如df,它有以下信息。基本上,我希望迭代列&;创建新列

df

ID Day1 Day2....Day10  

1  High  Low  

2  Medium High  

3  Low    Medium  

4  Low    Low  

5  High   High  

.   .      .  
.   .      .  
.   .      .  

现在,我想要下面的输出:对于每一天1到10,我想从 标记1到标记10

ID Day1 Day2....Day10 Tag1 Tag2.......Tag10  

1  High  Low........  3     1        

2  Medium High        2     3

3  Low    Medium      1     2

4  Low    Low         1     1

5  High   Medium      3     2

.   .      .          .     .  
.   .      .          .     .
.   .      .          .     .  

我试过blow代码,但似乎不起作用

df1=df.reindex(columns=[*df.columns.tolist(),'Tag1','Tag2','Tag3','Tag4','Tag5','Tag6','Tag7','Tag8','Tag9','Tag10'],fill_value='NA')

days=['Tag1','Tag2','Tag3','Tag4','Tag5','Tag6','Tag7','Tag8','Tag9','Tag10']

for j in days:
    for i in range(df.shape[0]):
        if df[i]=='High':
            df[i,j]=1
        else:
            df[i,j]=0
    j+=1

Tags: columns标记iddflowmediumhightag1
2条回答

Day列使用^{},然后^{},更改列名称并通过^{}追加到原始列:

d = {"Low": 1, "Medium": 2, "High": 3}
f = lambda x: x.replace('Day','Tag')
df = df.join(df.filter(like='Day').replace(d).rename(columns=f))
print (df)
   ID    Day1    Day2  Tag1  Tag2
0   1    High     Low     3     1
1   2  Medium    High     2     3
2   3     Low  Medium     1     2
3   4     Low     Low     1     1
4   5    High    High     3     3

首先,您必须准备一个映射字典,其中包含键值对,其中键是Day列中的条目,值是您要在标记列中分配相应条目的值。然后,您可以使用^{}函数将给定Day列中的每个条目映射到字典中相应的值,然后将其分配给新的Tag

使用以下命令:

import re

mapping = {"High": 3, "Medium": 2, "Low": 1}
for col in df.columns:
    mobj = re.search(r"Day(\d+)", col)
    if mobj:
        df[ f"Tag{mobj.group(1)}"] = df[col].map(mapping) # > map the values in dictionary

print(df)

样本结果:

   ID    Day1    Day2  Tag1  Tag2
0   1    High     Low     3     1
1   2  Medium    High     2     3
2   3     Low  Medium     1     2
3   4     Low     Low     1     1
4   5    High    High     3     3

相关问题 更多 >