[英]Iterating form over rows and columns at once on DataFrame Python
我有一個數據集,比如說 df,其中包含以下信息。 基本上我想遍歷列並創建新列
df
ID Day1 Day2....Day10
1 High Low
2 Medium High
3 Low Medium
4 Low Low
5 High High
. . .
. . .
. . .
現在,我想要下面的 output:對於每個 Day1 到 Day10,我想創建從 Tag1 到 Tag10 的新列。
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
. . . . .
. . . . .
. . . . .
我已經嘗試過打擊代碼,但它似乎不起作用
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
將DataFrame.filter
用於Day
列,然后使用DataFrame.replace
,將列名和 append 更改為DataFrame.join
的原始名稱
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
列中的條目,而值是您要在 Tag 列中分配相應條目的那個。 然后您可以使用Series.map
function 到 map 給定Day
col 中的每個條目到字典中的相應值,然后將其分配給新的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.