【发布时间】:2019-11-21 17:20:54
【问题描述】:
鉴于以下两个数据框:
df1 # 从 excel 电子表格中读取
data1 = {'ID':['1','2'],
'Prod Family Desc':['Install','Maintenance'], 'Prod Family Code':['',''],
'Prod Type Desc':['Installation Serice','Maintenance Service'],'Prod Type Code':['',''],
}
df1 = pd.DataFrame(data1)
print(df1)
结果 df1:
ID Prod Family Desc Prod Family Code Prod Type Desc Prod Type Code
0 1 Install Installation Serice
1 2 Maintenance Maintenance Service
df2 #是SQL查询的结果
data2 = {'Prod Class':['F','F','T','T'],
'Prod Desc':['Install','Maintenance','Installation Serice','Maintenance Service'],'Prod Code':['2525','2534','H123','H321']
}
df2 = pd.DataFrame(data2)
print(df2)
结果 df2:
Prod Class Prod Desc Prod Code
0 F Install 2525
1 F Maintenance 2534
2 T Installation Serice H123
3 T Maintenance Service H321
从 df2 分配 Prod Family Code 和 Prod Type Code 的 值 的最佳方法是什么到 列 Prod Family Code 和 Prod Type Code on df1?
我正在这样做:
stype = df2.loc[df2['Prod Class'] == "T"]
family = df2.loc[df2['Prod Class'] == "F"]
for i, concaterow in df1.iterrows():
for j, styp in stype.iterrows():
if (concaterow['Prod Type Desc'] == styp['Prod Desc']):
df1.loc[i,'Prod Type Code'] = styp['Prod Code']
for j, scat in family.iterrows():
if (concaterow['Prod Family Desc'] == scat['Prod Desc']):
df1.loc[i,'Prod Family Code'] = scat['Prod Code']
print(df1)
结果如预期:
ID Prod Family Desc Prod Family Code Prod Type Desc Prod Type Code
0 1 Install 2525 Installation Serice H123
1 2 Maintenance 2534 Maintenance Service H321
这种操作有pythonic的方式吗?
#
**编辑@FatihAkici 问题的答案。
@FatihAkici - 由于 df2 是 SQL 查询的结果,我的预期结果是插入表中的最新值。因此,给定 df2 如下:
data2 = {'Prod Class':['F','F','F','T','T'], 'Prod Desc':['Install','Maintenance','Install','Installation Serice','Maintenance Service'],'Prod Code':['2525','2534','2536','H123','H321'] } ```
The expected result would be:
```ID Prod Family Desc Prod Family Code Prod Type Desc Prod Type Code
0 1 Install 2536 Installation Serice H123
1 2 Maintenance 2534 Maintenance Service H321
【问题讨论】:
-
您通常不想迭代数据帧,而是想以某种方式加入它们。查看pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
-
如果您的 df2 中有重复项,您的预期输出是什么,例如
'Prod Desc':['Install', 'Maintenance', 'Install', 'Installation Serice', 'Maintenance Service']和'Prod Code':['1','2','3','4', '5'] -
您可以将此添加到您的帖子中吗?我看不懂。
-
等待您正确格式化您的答案,以便我可以帮助您。
-
@FatihAkici 格式答案已添加到帖子中。谢谢。