【发布时间】:2020-03-23 00:15:55
【问题描述】:
我有一个这样的数据框:
UniqueID CST WEIGHT VOLUME PRODUCTIVITY
0 413-20012 3 123 12 1113
1 413-45365 1 889 75 6748
2 413-21165 8 554 13 4536
3 413-24354 1 387 35 7649
4 413-34658 2 121 88 2468
5 413-36889 4 105 76 3336
6 413-23457 5 355 42 7894
7 413-30089 5 146 10 9112
8 413-41158 5 453 91 4545
9 413-51015 9 654 66 2232
而且我有一本关于 UniqueID 的父子映射的字典:
parent_child_dict = {
'413-51015': '413-41158',
'413-21165': '413-23457',
'413-45365': '413-41158',
'413-20012': '413-23457'
}
我需要做的是遍历数据框,并将“子”UniqueID 行的 WEIGHT、VOLUME 和 PRODUCTIVITY 值替换为“父”UniqueID 行中的值,生成的数据框如下所示:
UniqueID CST WEIGHT VOLUME PRODUCTIVITY
0 413-20012 3 355 42 7894
1 413-45365 1 453 91 4545
2 413-21165 8 355 42 7894
3 413-24354 1 387 35 7649
4 413-34658 2 121 88 2468
5 413-36889 4 105 76 3336
6 413-23457 5 355 42 7894
7 413-30089 5 146 10 9112
8 413-41158 5 453 91 4545
9 413-51015 9 453 91 4545
我已经尝试了几种可能的解决方案,但我遇到的问题是限制复制,即保留“子”行的 UniqueID 和 CST 值,但复制其他值.
我得到的最接近的是字典循环,其中每个配对都被输入到这个:
df.loc[df['UniqueID'] == '413-51015'] = df.loc[df['UniqueID'] == '413-41158'].to_numpy()
这似乎很好地将所有值从一行替换到另一行。
任何有关例外情况的帮助或总体上更好的解决方案都将非常有帮助。谢谢。
编辑
我已将第一个解决方案循环到我想在数据集中更改的列中,如下所示:
columns = []
for col in df.columns:
columns.append(col)
remove_perm = columns.remove('UniqueID')
remove_perm = columns.remove('CST')
print(columns)
输出
['WEIGHT', 'VOLUME', 'PRODUCTIVITY']
然后
for col in columns:
s = df[['UniqueID', col]].set_index('UniqueID')
df[col] = s.loc[df['UniqueID'].replace(parent_child_dict)].to_numpy()
这已经产生了所需的数据集。
【问题讨论】: