python - 根据另一个中的值填充新的 pandas df 列

标签 python pandas where-clause fill

我正在尝试在 pandas df 中创建一个新的,该列由另一个中的值填充。具体来说,对于下面的 df,我想在 Col['Location'] 中的 'Home' 值旁边填充 1

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。对于第四个、第五个、第六个唯一值,我想将它们标记为 2 等。

因此,对于Home df的Location值,Day中的前3个唯一值是周一、周二、周三,所以他们旁边都会有 1。第 4、5、6 个唯一值是周四、周五、周六,因此它们旁边会有 2。 Sun 已超过 6,因此它将有 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       

最佳答案

我认为首先仅过滤 Home 行,删除重复项并为 map 创建字典- 但仅适用于过滤的行:

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       

关于python - 根据另一个中的值填充新的 pandas df 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176930/

相关文章:

python - 转换 pandas DataFrame 列的大小写

python - 将单独的 self.request.sessions 合并为一个请求

python - 为多索引定义的数据框赋值

python - 并行化 Pandas 应用

c# - 在 Linq 中发出对象 where 子句 : the condition is bypassed

Python:通过函数导入到主命名空间

python - 将数据库数据导入 Joomla

python - 将 NaT 替换为 0 天

sql - SQL Server 中的多个子句,其中所有列都不等于零

带有 WHERE 子句的 MySQL SELECT 不包括数量为 '0' 的结果