我有一个数据框,其中包含 ['A','B','C',A','B','B'....] 形式的列“name”和一组数组:一个对应于“A”,例如 array_A = [0, 1, 2 ...] 和 array_B = [3, 1, 0 ...],array_C 等... 我想通过分配 array_A 来创建一个新列“值”,其中数据帧中的行名称为“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
最佳答案
您可以将 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
关于python - 使用一组子列分配新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52866212/