gpt4 book ai didi

python - 替代循环通过 Pandas 数据框行来应用条件?

转载 作者:行者123 更新时间:2023-12-04 09:23:38 24 4
gpt4 key购买 nike

我有一个数据框,我想根据某些条件进行修改。实际的数据框比下面的示例大得多(35k 行,400 列),有更多的患者列。
如果在患者列下给定的行有 2 个 NaN,我想删除整行。接下来,我想为数据框附加一个列,该列包含每行所有患者值的 df.std()。我读到不建议遍历 Pandas 数据帧,但我很难为此目的使用 numpy。
输入:

In [1]: df=pd.DataFrame({'chromosome':[1,1,5,4], 
...: 'strand':['-','-','+','-'],
...: 'elementloc':[4991, 8870, 2703, 9674],
...: 'Patient1_Psi': ['NaN', 0.25,0.63,0.92],
...: 'Patient2_Psi':[0.11, 0.45, 'NaN', 1.0],
...: 'Patient3_Psi':['NaN', 0.1, 'NaN', 0.4]})
...: df



Out[2]:
chromosome strand elementloc Patient1_Psi Patient2_Psi Patient3_Psi
0 1 - 4991 NaN 0.11 NaN
1 1 - 8870 0.25 0.45 0.1
2 5 + 2703 0.63 NaN NaN
3 4 - 9674 0.92 1 0.4
我想要的输出:
In [3]: df_new=pd.DataFrame({'chromosome':[1,4], 
...: 'strand':['-','-'],
...: 'elementloc':[ 8870, 9674],
...: 'Patient1_Psi': [0.25,0.92],
...: 'Patient2_Psi':[0.45, 1.0],
...: 'Patient3_Psi':[0.1, 0.4],
...: 'std':[0.175594, 0.325781]})
...: df_new


Out[4]:
chromosome strand elementloc Patient1_Psi Patient2_Psi Patient3_Psi std
0 1 - 8870 0.25 0.45 0.1 0.175594
1 4 - 9674 0.92 1.00 0.4 0.325781
建议?

最佳答案

你可以这样做,使用 filter用于匹配模式的列过滤:

df = df.replace('NaN', np.nan)
df_new = df[~df.filter(like='Patient').isna().any(axis=1)]
pd.concat([df_new, df_new.filter(like='Patient').std(axis=1).rename('std')], axis=1)
输出:
   chromosome strand  elementloc  Patient1_Psi  Patient2_Psi  Patient3_Psi       std
1 1 - 8870 0.25 0.45 0.1 0.175594
3 4 - 9674 0.92 1.00 0.4 0.325781

关于python - 替代循环通过 Pandas 数据框行来应用条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63057839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com