【发布时间】:2019-02-12 09:01:51
【问题描述】:
我正在尝试创建一个更高效的脚本,该脚本根据另一列中的值创建一个新的column。下面的脚本执行此操作,但我一次只能选择一个string。我想对所有单个值执行此操作。
对于下面的df,我目前正在对Location 中的每个string 运行脚本。但是,我想在所有uniquestrings 上运行脚本。
关于如何分配新列的说明:Location 中的每个 string 获取 Day 中前 3 个唯一项的值。因此,对于Location 中的每个值,都会为Day 中的前三个唯一值分配一个新字符串。
import pandas as pd
import numpy as np
d = ({
'Day' : ['Mon','Tues','Wed','Wed','Thurs','Thurs','Fri','Mon','Sat','Fri','Sun'],
'Location' : ['Home','Home','Away','Home','Away','Home','Home','Home','Home','Away','Home'],
})
df = pd.DataFrame(data=d)
#Select value
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)
目前我正在选择['Location'] 中的每个值,例如mask = df['Location'] == 'Home'。
我想在所有价值观上都这样做。例如mask = df['Location'] == All unique values
预期输出:
Day Location Assign
0 Mon Home C1
1 Tues Home C1
2 Wed Away C2
3 Wed Home C1
4 Thurs Away C2
5 Thurs Home C3
6 Fri Home C3
7 Mon Home C1
8 Sat Home C3
9 Fri Away C2
10 Sun Home C4
【问题讨论】:
标签: python pandas loops numpy if-statement