如何合并大量系列数据?制作另一个数据框。使用堆栈函数
how to consolidate lots of series data? to make another dataframe. using stack function
我想合并 dataframe,但我不知道如何在这里上传 dataframe,所以我只留在下面 link。
我要合并的数据(电子表格上的原始数据)是系列或数据框的形式。
Part#:由8~13个字符集组成(字母和数字混合)
说明:总是在 Part# 的正下方。
Ref#:很多 Ref# 用逗号分隔。最后一个 Ref# 末尾没有逗号
从我的上一个问题来看,有人建议我使用 iloc 查找 Part#。但是我会有很多行要合并,所以我不能一一指定它们。有没有人给我实现
有了堆叠功能,我想堆叠 Ref# 并且每个不同的 Ref# 都必须根据其在原始数据上的上述值有其 Part# 和描述
如何为此构建 python 代码?
https://docs.google.com/spreadsheets/d/10zSKfXavaXWl1MOo_ScW60rbERUDiQtDi6p-UbrUgro/edit?usp=sharing
import pandas as pd
# create dataframe
df = pd.DataFrame({
"a" : [
'A2C02158300',
'D REC/BAS16-03W,100V,250mA,SOD323,0s,SMD',
'D201,D206,D218,D219,D222,D302,D308,D408,',
'D409,D501,D502,D505,D506,D507,D508',
'A2C02250500',
'T BIP/PUMD3,SOT363,SMD SOLDERING',
'T209,T501,T502',
'A2C00004540',
'CY-AIIA 5.6K 1% 1/16W 0603',
'R107,R124,R125,R126,R209,R214,R255,R329,',
'R377,R404,R426',
'A2C00000243',
'ZENER DIODE(A/S)',
'Z119',
'A2C01888600',
'R LIN,10K,5%,TK200,63mW,0402',
'R101,R102,R106,R120,R184,R187,R289,R291',
',',
'R317,R347,R400,R432,R449,R450,R464,R514',
',',
'R515,R524,R615,R720,R753,R779,R780,R781',
',',
'R784,R787,R788,R789,R790'
]
})
df.head(100)
输出:
然后我们创建包含“part”和“description”列的新数据框。部件列基于正则表达式,可能应该更改(我不知道部件名称的格式):
df1 = pd.DataFrame({
'part': df[df['a'].str.match('A\dC\d{8}')]['a'].tolist(),
'description': df.iloc[df[df['a'].str.match('A\dC\d{8}')].index + 1]['a'].tolist()
})
df1.head()
输出:
然后我们创建一个用于合并参考行的临时数据框:
df2 = pd.merge(df, df1, left_on='a', right_on='part', how='left')
df2.drop(df2[df2['a'].isin(df2['description'])].index, inplace=True)
df2.loc[df2['a'] == df2['part'], 'a'] = ''
df2['part'].fillna(method='ffill', inplace=True)
df2.head()
输出:
然后我们合并参考行:
df1 = df1.merge(df2.groupby(['part'])['a'].agg([('a', ''.join)]), on='part').rename(columns={'a': 'ref'})
df1.head()
输出:
最后我们分解参考列:
df1 = df1.set_index(['part', 'description']).apply(lambda x: x.str.split(',').explode()).reset_index()
df1
输出:
我想合并 dataframe,但我不知道如何在这里上传 dataframe,所以我只留在下面 link。
我要合并的数据(电子表格上的原始数据)是系列或数据框的形式。
Part#:由8~13个字符集组成(字母和数字混合)
说明:总是在 Part# 的正下方。
Ref#:很多 Ref# 用逗号分隔。最后一个 Ref# 末尾没有逗号
从我的上一个问题来看,有人建议我使用 iloc 查找 Part#。但是我会有很多行要合并,所以我不能一一指定它们。有没有人给我实现
有了堆叠功能,我想堆叠 Ref# 并且每个不同的 Ref# 都必须根据其在原始数据上的上述值有其 Part# 和描述
如何为此构建 python 代码?
https://docs.google.com/spreadsheets/d/10zSKfXavaXWl1MOo_ScW60rbERUDiQtDi6p-UbrUgro/edit?usp=sharing
import pandas as pd
# create dataframe
df = pd.DataFrame({
"a" : [
'A2C02158300',
'D REC/BAS16-03W,100V,250mA,SOD323,0s,SMD',
'D201,D206,D218,D219,D222,D302,D308,D408,',
'D409,D501,D502,D505,D506,D507,D508',
'A2C02250500',
'T BIP/PUMD3,SOT363,SMD SOLDERING',
'T209,T501,T502',
'A2C00004540',
'CY-AIIA 5.6K 1% 1/16W 0603',
'R107,R124,R125,R126,R209,R214,R255,R329,',
'R377,R404,R426',
'A2C00000243',
'ZENER DIODE(A/S)',
'Z119',
'A2C01888600',
'R LIN,10K,5%,TK200,63mW,0402',
'R101,R102,R106,R120,R184,R187,R289,R291',
',',
'R317,R347,R400,R432,R449,R450,R464,R514',
',',
'R515,R524,R615,R720,R753,R779,R780,R781',
',',
'R784,R787,R788,R789,R790'
]
})
df.head(100)
输出:
然后我们创建包含“part”和“description”列的新数据框。部件列基于正则表达式,可能应该更改(我不知道部件名称的格式):
df1 = pd.DataFrame({
'part': df[df['a'].str.match('A\dC\d{8}')]['a'].tolist(),
'description': df.iloc[df[df['a'].str.match('A\dC\d{8}')].index + 1]['a'].tolist()
})
df1.head()
输出:
然后我们创建一个用于合并参考行的临时数据框:
df2 = pd.merge(df, df1, left_on='a', right_on='part', how='left')
df2.drop(df2[df2['a'].isin(df2['description'])].index, inplace=True)
df2.loc[df2['a'] == df2['part'], 'a'] = ''
df2['part'].fillna(method='ffill', inplace=True)
df2.head()
输出:
然后我们合并参考行:
df1 = df1.merge(df2.groupby(['part'])['a'].agg([('a', ''.join)]), on='part').rename(columns={'a': 'ref'})
df1.head()
输出:
最后我们分解参考列:
df1 = df1.set_index(['part', 'description']).apply(lambda x: x.str.split(',').explode()).reset_index()
df1
输出: