6 python loops if-statement numpy pandas
我正在尝试创建一个更有效的脚本,column在另一列中创建一个新的基于off的值.下面的脚本执行此操作,但我一次只能选择一个string.我想对所有个人价值观做这件事.
对于df下面我目前正在运行的每个单独的脚本string在Location.但是,我想在所有上运行脚本unique strings.
有关如何分配新列的说明:每个人string都Location获取前3个唯一项的值Day.因此,对于每个值Location,将新的字符串分配给前3个唯一值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)
Run Code Online (Sandbox Code Playgroud)
目前我正在选择每个值['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
Run Code Online (Sandbox Code Playgroud)
您可以使用:
def f(x):
#get unique days
u = x['Day'].unique()
#mapping dictionary
d = dict(zip(u, np.arange(len(u)) // 3 + 1))
x['new'] = x['Day'].map(d)
return x
df = df.groupby('Location', sort=False).apply(f)
#add Location column
s = df['new'].astype(str) + df['Location']
#encoding by factorize
df['new'] = pd.Series(pd.factorize(s)[0] + 1).map(str).radd('C')
print (df)
Day Location new
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |