我有一个数据框,其格式为['A','B','C',A','B','B'....]的列'name'和一组数组:对应于'A'的一个,例如array_A = [0,1,2 ...]和array_B = [3,1,0 ...],array_C等... 我想通过分配array_A来创建新的列“ value”,其中dataframe中的行名称为“ A”,类似地为“ B”和“ C”。
函数df['value']=np.where(df['name']=='A',array_A, df['value'])
不会执行此操作,因为它将覆盖其他名称的值或存在维数问题。
例如:
arrays = {'A': np.array([0, 1, 2]),
'B': np.array([3, 1])}
所需的输出:
df = pd.DataFrame({'name': ['A', 'B', 'A', 'A', 'B']})
name value
0 A 0
1 B 3
2 A 1
3 A 2
4 B 1
答案 0 :(得分:1)
您可以将for
循环与字典一起使用:
arrays = {'A': np.array([0, 1, 2]),
'B': np.array([3, 1])}
df = pd.DataFrame({'name': ['A', 'B', 'A', 'A', 'B']})
for k, v in arrays.items():
df.loc[df['name'] == k, 'value'] = v
df['value'] = df['value'].astype(int)
print(df)
name value
0 A 0
1 B 3
2 A 1
3 A 2
4 B 1