我有三个数据帧:df1,df2,df3。我正在尝试添加ART_UNIT do df1的列表。
df1是260846行x 4列:
Index SYMBOL level not-allocatable additional-only
0 A 2 True False
1 A01 4 True False
2 A01B 5 True False
3 A01B1/00 7 False False
4 A01B1/02 8 False False
5 A01B1/022 9 False False
6 A01B1/024 9 False False
7 A01B1/026 9 False False
df2是941516行x 2列:
Index CLASSIFICATION_SYMBOL_CD ART_UNIT
0 A44C27/00 3715
1 A44C27/001 2015
2 A44C27/001 3715
3 A44C27/001 2615
4 A44C27/005 2815
5 A44C27/006 3725
6 A44C27/007 3215
7 A44C27/008 3715
8 F41A33/00 3715
9 F41A33/02 3715
10 F41A33/04 3715
11 F41A33/06 3715
12 G07C13/00 3715
13 G07C13/005 3715
14 G07C13/02 3716
并且df3与df2格式相同,但是具有673023行x 2列
df2和df3中的'CLASSIFICATION_SYMBOL_CD'
不是唯一的。
对于df2和df3中的每个'CLASSIFICATION_SYMBOL_CD'
,我想在df1 'SYMBOL'
中找到相同的字符串,然后向df1 'ART_UNIT'
中添加一个包含所有{{1} }来自df2和df3。
例如,在df2中,'ART_UNIT'
A44C27 / 001具有'CLASSIFICATION_SYMBOL_CD'
2015、3715和2615。
我想将那些ART_UNIT
写入df1中的正确行,以便读取:
ART_UNIT
到目前为止,我已经尝试通过Index SYMBOL level not-allocatable additional-only ART_UNIT
211 A44C27/001 2 True False [2015, 3715, 2615]
'CLASSIFICATION_SYMBOL_CD'
哪个给我:
gp = df2.groupby(['CLASSIFICATION_SYMBOL_CD'])
for x in df2['CLASSIFICATION_SYMBOL_CD'].unique():
df2_g = gp.get_group(x)
答案 0 :(得分:1)
由于df2
和df3
具有相同的格式,因此它们先合并在一起。
import pandas as pd
df = pd.concat([df2, df3])
然后获取所有艺术单位的列表groupby
并应用列表。
df = df.groupby('CLASSIFICATION_SYMBOL_CD').ART_UNIT.apply(list).reset_index()
# CLASSIFICATION_SYMBOL_CD ART_UNIT
#0 A44C27/00 [3715]
#1 A44C27/001 [2015, 3715, 2615]
#2 A44C27/005 [2815]
#3 A44C27/006 [3725]
#...
最后,将此信息合并到df1
中(您可以映射或其他方式)。首先重命名该列,以减少合并后需要清除的内容。
df = df.rename(columns={'CLASSIFICATION_SYMBOL_CD': 'SYMBOL'})
df1 = df1.merge(df, on='SYMBOL', how='left')
输出:
Index SYMBOL level not-allocatable additional-only ART_UNIT
0 0 A 2 True False NaN
1 1 A01 4 True False NaN
2 2 A01B 5 True False NaN
3 3 A01B1/00 7 False False NaN
4 4 A01B1/02 8 False False NaN
5 5 A01B1/022 9 False False NaN
6 6 A01B1/024 9 False False NaN
7 7 A01B1/026 9 False False NaN
很遗憾,您在df1
中没有提供任何重叠的符号,因此没有任何合并。但这将处理您的完整数据。