【发布时间】:2020-06-23 12:50:53
【问题描述】:
我想从包含多个碱基(A、C、G、T、U1 和 U 的数据的 pd.DataFrame 中插入每两个能量值差异的差异2) 用于每个环境中的每个基地,依此类推。我想到了类似fhe的东西。我想过遍历整个数据框,但它没有用,也绝对不是 pd.DataFrames 的用途。
例如,我希望在其“中性”和“正”值之间以 pbs 为单位负责基础 A 的差异,从而扩展每个基础、环境和更多标准的原则,这些标准可能会在未来添加。
虽然我听说过pandas.MultiIndex,但我没有太多经验,但这对我来说似乎是一个可能的解决方案,不是吗?
import seaborn as sns
import pandas as pd
import os
with open (os.path.join (os.environ ['HOME'], 'data.csv'), 'r') as f :
df = pd.read_csv (f, index_col = 0, header = 0, thousands = None, decimal = '.')
df = df.loc [df ['base'].isin (['A', 'C', 'G', 'U'])]
# one way I tried
pos = df.loc [df ['charge'] == 'pos']
neg = df.loc [df ['charge'] == 'neg']
neu = df.loc [df ['charge'] == 'neu']
df.loc [df ['charge'] == 'neg', 'difference'] = neg ['energy'] - neu ['energy']
df.loc [df ['charge'] == 'pos', 'difference'] = pos ['energy'] - neu ['energy']
# another way I tried
for posneg in ['pos', 'neg'] :
df.loc [df ['charge'] == posneg, 'difference'] = lit.query ("(charge == 'neu') - (charge == '@posneg')")
~/data.csv:
,environment,base,charge,energy,type
0,pbs,A,neg,0.34835,1
1,pbs,C,neg,0.40194,2
2,pbs,G,neg,0.34959,1
3,pbs,T,neg,0.40738,2
4,pbs,U1,neg,0.34904,2
5,pbs,U2,neg,0.40016,2
6,pbs,A,neu,0.40151,3
7,pbs,C,neu,0.34494,3
8,pbs,G,neu,0.40193,3
9,pbs,T,neu,0.34458,3
10,pbs,U1,neu,0.34646,3
11,pbs,U2,neu,0.40871,3
12,pbs,A,pos,0.34047,2
13,pbs,C,pos,0.40157,2
14,pbs,G,pos,0.34232,2
15,pbs,T,pos,0.40854,2
16,pbs,U1,pos,0.34611,2
17,pbs,U2,pos,0.34414,2
18,polymeric,A,neg,0.28333,2
19,polymeric,C,neg,0.46908,3
20,polymeric,G,neg,0.33224,3
21,polymeric,T,neg,0.35825,1
22,polymeric,U1,neg,0.33033,3
23,polymeric,U2,neg,0.39167,3
24,polymeric,A,neu,0.36964,2
25,polymeric,C,neu,0.33979,2
26,polymeric,G,neu,0.41815,3
27,polymeric,T,neu,0.30786,2
28,polymeric,U1,neu,0.40727,1
29,polymeric,U2,neu,0.36719,3
30,polymeric,A,pos,0.38173,1
31,polymeric,C,pos,0.35060,3
32,polymeric,G,pos,0.37617,1
33,polymeric,T,pos,0.44172,2
34,polymeric,U1,pos,0.31267,3
35,polymeric,U2,pos,0.34478,2
【问题讨论】:
标签: python pandas multi-index