我需要一些帮助才能用pandas in python
以下是数据框:
Order Nsp1 Nsp2 Tips Select
Carnivora 10 10 SpA,SpB,SpC 0.7678
Carnivora 1 1 SpD NA
Carnivora 2 2 SpE,SpF 0.467103
Carnivora 4 4 SpG 0.303415
您可以看到column Tips
可以有多个Spnames
,我想获得一个新的数据框,例如:
Species Order Nsp1 Nsp2 Select
SpA Carnivora 10 10 0.7678
SpB Carnivora 10 10 0.7678
SpC Carnivora 10 10 0.7678
SpD Carnivora 1 1 NA
SpE Carnivora 2 2 0.467103
SpF Carnivora 2 2 0.467103
SpG Carnivora 4 4 0.303415
Tips column
消失的地方反而我用它们创建了一个新的column Species
。
有人有想法吗?
感谢您的帮助和时间。
答案 0 :(得分:1)
首先,您必须使用this答案中的函数将Tips
列拆分为行:
df = explode_str(df, 'Tips', sep=',')
print(df)
Order Nsp1 Nsp2 Tips Select
0 Carnivora 10 10 SpA 0.767800
0 Carnivora 10 10 SpB 0.767800
0 Carnivora 10 10 SpC 0.767800
1 Carnivora 1 1 SpD NaN
2 Carnivora 2 2 SpE 0.467103
2 Carnivora 2 2 SpF 0.467103
3 Carnivora 4 4 SpG 0.303415
然后,您可以将Tips
+ Order
列中的字符串连接在一起以创建新列:
df['Species Order'] = df['Tips'] + ' ' + df['Order']
df.drop(['Order', 'Tips'], axis=1, inplace=True)
df.reset_index(inplace=True, drop=True)
print(df)
Nsp1 Nsp2 Select Species Order
0 10 10 0.767800 SpA Carnivora
1 10 10 0.767800 SpB Carnivora
2 10 10 0.767800 SpC Carnivora
3 1 1 NaN SpD Carnivora
4 2 2 0.467103 SpE Carnivora
5 2 2 0.467103 SpF Carnivora
6 4 4 0.303415 SpG Carnivora
链接答案中使用的功能:
def explode_str(df, col, sep):
s = df[col]
i = np.arange(len(s)).repeat(s.str.count(sep) + 1)
return df.iloc[i].assign(**{col: sep.join(s).split(sep)})