我在Excel中有一个带有大量计算的工作簿,但是文件太大而且计算花了很长时间才能在Excel中完成所以我试图将文件移动到另一个程序(最好是Python)来处理计算。我只有Python的基本经验,所以我甚至不确定这是否是处理这种计算的最佳软件。
无论如何,下面是我正在使用的表(这是实际表的较小版本;实际表有超过35,000行)。
State Item # Val1 Val2 Val3 Val4 Val5 Rank1 Rank2 Rank3 Rank4 Rank5 Count
CA 1 5.55 4.16 3.12 2.34 1.76 2 5 8 11 14 2
CA 2 6.43 4.82 3.62 2.71 2.03 1 3 6 9 12 2
CA 3 4.79 3.59 2.69 2.02 1.52 4 7 10 13 15 1
FL 4 10.41 7.81 5.86 4.39 3.29 1 3 5 7 9 3
FL 5 8.02 6.02 4.51 3.38 2.54 2 4 6 8 11 2
FL 6 3.22 2.42 1.81 1.36 1.02 10 12 13 14 15 0
NY 7 0.97 0.73 0.55 0.41 0.31 8 10 12 14 15 0
NY 8 1.44 1.08 0.81 0.61 0.46 6 7 9 11 13 0
NY 9 14.31 10.73 8.05 6.04 4.53 1 2 3 4 5 5
WA 10 9.31 6.98 5.24 3.93 2.95 1 3 5 7 9 3
WA 11 8.91 6.68 5.01 3.76 2.82 2 4 6 8 10 2
WA 12 1.55 1.16 0.87 0.65 0.49 11 12 13 14 15 0

列State,Item#,Val1,Val2,Val3,Val4和Val5是我的输入数据。我需要做的是找到每个州的前5个值,并计算每个项目#的前5个值中有多少个。我在Rank1-Rank5和Count列中完成了Excel中的计算。我想知道这是否可以用Python完成,如果可以,怎么做?我还希望代码是灵活的,以允许我添加更多" Val"列(可能最多10个值)。
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
通常在使用Python中的表格数据时,pandas库是一个很好的工具。有很多方法可以做你想要的,IIUC,但这里不应该太难以遵循。这主要是为了让您了解您可以做的事情。从看起来像你的DataFrame开始:
>>> df
State Item # Val1 Val2 Val3 Val4 Val5
0 CA 1 5.55 4.16 3.12 2.34 1.76
1 CA 2 6.43 4.82 3.62 2.71 2.03
2 CA 3 4.79 3.59 2.69 2.02 1.52
3 FL 4 10.41 7.81 5.86 4.39 3.29
4 FL 5 8.02 6.02 4.51 3.38 2.54
5 FL 6 3.22 2.42 1.81 1.36 1.02
6 NY 7 0.97 0.73 0.55 0.41 0.31
7 NY 8 1.44 1.08 0.81 0.61 0.46
8 NY 9 14.31 10.73 8.05 6.04 4.53
9 WA 10 9.31 6.98 5.24 3.93 2.95
10 WA 11 8.91 6.68 5.01 3.76 2.82
11 WA 12 1.55 1.16 0.87 0.65 0.49
我们可以(1)将其转为所有数据都是垂直的,(2)对它们进行排名,以便较低的数字与最高得分相关联(有很多选项可以处理关系;我忽略了这些问题) ,(3)决定我们感兴趣的是哪些,以及(4)按州/项目#组合计算它们。 (原则上我猜一个项目可能属于多个州,在这种情况下,我们只是将状态从最后一个组中删除。)
df_m = pd.melt(df, id_vars=["State", "Item #"], var_name="Value")
df_m["rank"] = df_m.groupby("State")["value"].rank(ascending=False)
df_m["top"] = rank <= 5
df_m.groupby(["State", "Item #"], as_index=False)["top"].sum()
最终产生
State Item # top
0 CA 1 2
1 CA 2 2
2 CA 3 1
3 FL 4 3
4 FL 5 2
5 FL 6 0
6 NY 7 0
7 NY 8 0
8 NY 9 5
9 WA 10 3
10 WA 11 2
11 WA 12 0
这只是一种融化(一种枢转操作);一个小组;等级;一个对比;另一个群体;和一个总和(真== 1,所以总和布尔值是一个计数)。对于一个完整的初学者来说可能有点吓人,但希望它会鼓励你尝试一下熊猫,因为只需要一点经验就可以非常有效地完成大量的操作。