根据anoth中的值填充新列

2024-09-25 16:28:48 发布

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

我试图在一个pandas df中创建一个新的column,它由另一个column中的值填充。具体来说,对于下面的df,我想填充1'Home'值旁边的Col['Location']。你知道吗

import pandas as pd

d = ({
    'Day' : ['Mon','Tues','Mon','Wed','Thurs','Fri','Mon','Sat','Sun','Tues'],                 
    'Location' : ['Home','Home','Away','Home','Home','Home','Home','Home','Home','Away'],               
     })

df = pd.DataFrame(data=d)

我目前正在通过以下方式进行:

m = lambda x: dict(Home='1').get(x, '')
df = df.assign(Assign=df.Location.map(m))

但是,我希望包含Col['Day']来更改新的列值。我希望把数字分成三个部分。对于Day中的前三个唯一值,我要将它们全部标记为1。对于第4、第5、第6个唯一值,我要给它们加上标签2等等

所以对于Homedf的Location值,Day中的前3个unique值是Mon, Tues, Wed,所以它们旁边都有1。第四、第五、第六个唯一值是Thurs, Fri, Sat,因此它们旁边会有2Sun6上,所以它会有一个3

预期输出:

     Day Location Assign
0    Mon     Home      1
1   Tues     Home      1
2    Mon     Away       
3    Wed     Home      1
4  Thurs     Home      2
5    Fri     Home      2
6    Mon     Home      1
7    Sat     Home      2
8    Sun     Home      3
9   Tues     Away       

Tags: pandasdfhomecolumncollocationsatsun
1条回答
网友
1楼 · 发布于 2024-09-25 16:28:48

我认为首先只过滤Home行,删除重复项并为^{}创建字典-但只过滤行:

mask = df['Location'] == 'Home'
df1 = df[mask].drop_duplicates('Day')
d = dict(zip(df1['Day'], np.arange(len(df1)) // 3 + 1))

df.loc[mask, 'Assign'] = df.loc[mask, 'Day'].map(d)
print (df)
     Day Location  Assign
0    Mon     Home     1.0
1   Tues     Home     1.0
2    Mon     Away     NaN
3    Wed     Home     1.0
4  Thurs     Home     2.0
5    Fri     Home     2.0
6    Mon     Home     1.0
7    Sat     Home     2.0
8    Sun     Home     3.0
9   Tues     Away     NaN

如果需要整数列:

df['Assign'] = np.where(mask, df['Day'].map(d), 0)
print (df)
     Day Location  Assign
0    Mon     Home       1
1   Tues     Home       1
2    Mon     Away       0
3    Wed     Home       1
4  Thurs     Home       2
5    Fri     Home       2
6    Mon     Home       1
7    Sat     Home       2
8    Sun     Home       3
9   Tues     Away       0

如果混合数字和空字符串没有问题:

df['Assign'] = np.where(mask, df['Day'].map(d), '')
print (df)
     Day Location Assign
0    Mon     Home      1
1   Tues     Home      1
2    Mon     Away       
3    Wed     Home      1
4  Thurs     Home      2
5    Fri     Home      2
6    Mon     Home      1
7    Sat     Home      2
8    Sun     Home      3
9   Tues     Away       

相关问题 更多 >