我在这里看过其他解释,但没有一个非常合适。 解包代码有效,但速度很慢。是否有一个更好的方法,我可以使用python。我无法看到如何在此处获得列表理解能力。 任何建议都会非常有用。
import pandas as pd
df = pd.DataFrame(data={'a':['A1 + A3','B4 + A4 + D2','C2 + D2'],'b':['L700 +
L800','G700','L2600 + L900'],'c':['6','7','8']})
df
a b c
0 A1 + A3 L700 + L800 6
1 B4 + A4 + D2 G700 7
2 C2 + D2 L2600 + L900 8
df2 = pd.DataFrame(columns = df.columns)
for index, row in df.iterrows():
userLabel = row.loc['a']
cells = userLabel.split('+')
ID = row.loc['b']
tech = ID.split('+')
i = 0
for cell in cells:
cell = cell.strip()
row.loc['a'] = cell
if i > len(tech)-1:
i = i-1
row.loc['b'] = tech[i]
df2.loc[len(df2)] = row
i += 1
df2
a b c
0 A1 L700 6
1 A3 L800 6
2 B4 G700 7
3 A4 G700 7
4 D2 G700 7
5 C2 L2600 8
6 D2 L900 8
答案 0 :(得分:1)
使用:
df = (df.set_index('c')
.stack()
.str.split('\s+\+\s+', expand=True)
.stack()
.unstack(1)
.ffill()
.reset_index(level=1, drop=True)
.reset_index()
.reindex(columns=['a','b','c'])
)
print (df)
a b c
0 A1 L700 6
1 A3 L800 6
2 B4 G700 7
3 A4 G700 7
4 D2 G700 7
5 C2 L2600 8
6 C2 L900 8
<强>解释强>: