Cam*_*Cam 2 python numpy dataframe pandas
我有这个数据框:
df = pd.DataFrame({'FS':[1,1,2],'FL':[2,3,4],'GS':[5,8,9],'GL':[5,2,4],'JJ':['no','more','math']})
print(df)
FS FL GS GL JJ
0 1 2 5 5 no
1 1 3 8 2 more
2 2 4 9 4 math
Run Code Online (Sandbox Code Playgroud)
我想在循环 b/c 中的“L”(长)和“S”(短)之间添加列,此数据帧长 64 列,但在填充字符串的列 JJ 之前停止。我想对这些列执行的操作是:Ratio = S/(S+L) 所以我的数据框看起来像这样:
df = pd.DataFrame({'FS':[1,1,2],'FL':[2,3,4],'FRatio':[0.333,0.25,0.333],\
'GS':[5,8,9],'GL':[5,2,4],'GRatio':[0.5,0.8,0.692],\
'JJ':['no','more','math']})
print(df)
FS FL FRatio GS GL GRatio JJ
0 1 2 0.333 5 5 0.500 no
1 1 3 0.250 8 2 0.800 more
2 2 4 0.333 9 4 0.692 math
Run Code Online (Sandbox Code Playgroud)
我想过将数据帧融合为长格式,但每个 S/L 对都是独一无二的,我想不出将它们分开的方法。
使用insert放置在您想要的列。找到给定前缀的“L”列的位置,然后将其放在之后。这假设您的 DataFrame 是在开始时组织的,以便 'XS' 和 'XL' 列按该顺序成对出现。
您可以手动指定前缀或使用除最后一个之外的所有标签字符(即删除 'S' 或 'L') 'JJ' 列之前的所有列,以确定它们是什么。
prefixes = df.columns[:df.columns.get_loc('JJ')].str[:-1].unique()
#prefixes = ['F', 'G']
for prefix in prefixes:
s = df[f'{prefix}S']/(df[f'{prefix}S'] + df[f'{prefix}L'])
# Location after the 'XL'
loc = df.columns.get_loc(f'{prefix}L')+1
df.insert(loc, f'{prefix}Ratio', s)
Run Code Online (Sandbox Code Playgroud)
FS FL FRatio GS GL GRatio JJ
0 1 2 0.333333 5 5 0.500000 no
1 1 3 0.250000 8 2 0.800000 more
2 2 4 0.333333 9 4 0.692308 math
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34 次 |
| 最近记录: |