如何在python中进行一些计算之后添加新列?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (303)
ID_REF      1007_s_at 1053_at 117_at 121_at 1255_g_at
GSM11111    0.08277 0.00874 0.00363 0.01877 0.00075
GSM95474    0.09503 0.00592 0.00352 0.01944 0.00055
GSM95475    0.08486 0.00678 0.00386 0.01973 0.00039
GSM95476    0.08105 0.00913 1       0.01801 0.00055
GSM95477    0.05918 0.00812 0.00428 0.01597 0.00033
GSM95478    0.07615 0.00777 0.00438 0.01799 0.00129
GSM95479    0.0976  0       0.00399 0.0216  0.00125
GSM95480    0.08499 0.00442 0.00298 0.01897 0.00015
GSM95481    0.08893 0.00734 0.00204 0.01706 0.00089
GSM99999    0.05981 0.01587 0.00365 0.01709 0.0006

这是我的csv文件数据框,其中我有一定的值,我希望逐列找到它们的具有一些条件(计算所有值但忽略0)的总数。新行将被添加到GSM99999下面,名为Final及以下每一栏,例如1007_s_at或其他列52(其中52是数字值的总数,在excel文件中保留0)

无论有多少列和行,我都希望对整个excel文件运行此操作。我目前正在使用pandas。

下面是CSV文件映像版本:https://i.stack.imgur.com/HaEuk.png

下面是我想要的输出:https://i.stack.imgur.com/6UPhZ.png

提问于
用户回答回答于

从dataframedf中的excel文件中读取文件后,你需要:

df = df.set_index('ID_REF')
df = df.append(pd.DataFrame(dict(((df.notnull()) & (df != 0)).sum()), index=['Final']))

输出:

          1007_s_at 1053_at 117_at  121_at  1255_g_at
GSM11111    0.08277 0.00874 0.00363 0.01877 0.00075
GSM95474    0.09503 0.00592 0.00352 0.01944 0.00055
GSM95475    0.08486 0.00678 0.00386 0.01973 0.00039
GSM95476    0.08105 0.00913 1.00000 0.01801 0.00055
GSM95477    0.05918 0.00812 0.00428 0.01597 0.00033
GSM95478    0.07615 0.00777 0.00438 0.01799 0.00129
GSM95479    0.09760 0.00000 0.00399 0.02160 0.00125
GSM95480    0.08499 0.00442 0.00298 0.01897 0.00015
GSM95481    0.08893 0.00734 0.00204 0.01706 0.00089
GSM99999    0.05981 0.01587 0.00365 0.01709 0.00060
Final      10.00000 9.00000 10.00000 10.00000 10.00000
用户回答回答于
import pandas as pd

df = pd.read_csv("<path to file>.csv").reset_index()

# update headers
df.columns = df.iloc[0]
df = df.iloc[1:].set_index("ID_REF")

df.loc["Final"] = ((df.notnull()) & (df != 0)).sum()

扫码关注云+社区

领取腾讯云代金券