【发布时间】:2021-01-07 23:16:06
【问题描述】:
我创建了一个小程序来查找 df 的两个特定列的平均值、中值和众数。我使用 np.mean 和 np.median 来查找平均值和中值,但是对于模式,我从 df 创建了一个 numpy 数组并计算了模式。我将它们打印到控制台并且值看起来不错,但是我想从 numpy 数组中获取模式值以显示在我的 df 中,该 df 有四列分别表示“学生”、“分数”、“平均值”和“中位数”。我想知道是否有办法获取模式值并附加到 df 的末尾以使第五列标题为“模式”。我的代码如下所示。我也不想为此使用 scipy 之类的库,以便在有其他方法时不使用 sparse。
def mean_median():
df = pd.read_csv('Surveys.csv')
dfm= df.groupby("STUDENT")[["SCORE"]].agg([np.mean, np.median]).reset_index()
print(dfm)
arr = dfm.to_numpy()
print('\nNumpy Array\n----------\n', arr)
vals,counts = np.unique(arr, return_counts=True)
index = np.argmax(counts)
return vals[index]
这是我的输出示例,如果它有助于使事情更清晰易懂
STUDENT SCORE
mean median
0 2443.0 93.210145 94.0
1 2445.0 94.652113 95.0
2 2447.0 93.919775 95.0
3 2451.0 95.203571 95.0
4 2832.0 94.544304 95.0
.. ... ... ...
276 27323.0 95.585106 96.0
277 27324.0 94.562105 95.0
278 27325.0 96.986348 98.0
279 27326.0 96.809524 97.0
280 27334.0 96.102564 97.0
[281 rows x 3 columns]
Numpy Array
----------
[[ 2443. 93.21014493 94. ]
[ 2445. 94.65211268 95. ]
[ 2447. 93.91977481 95. ]
[ 2451. 95.20357143 95. ]
[ 2832. 94.5443038 95. ]
[ 2838. 94.97988265 95. ]
[ 2839. 93.88054608 94. ]
[ 2841. 93.90789474 94. ]
[ 2980. 94.14044944 95. ]
[ 3220. 94.44219067 95. ]
[ 3221. 93.80825959 94. ]
[ 3222. 93.88416076 94. ]
[ 3229. 98.42857143 100. ]
[ 3231. 92.11363636 93. ]
[ 3236. 94.3677686 95. ]
[ 3238. 93.84027778 94. ]
[ 3332. 93.12958963 94. ]
[ 3333. 92.83663366 93.5 ]
从几行中采样输入数据以尝试重新创建
STUDENT SCORE
25718 97
25719 97
26990 95
23809 92
24032 90
22723 87
24688 92
25714 89
25718 78
23078 90
25713 90
24032 87
26990 77
26990 89
【问题讨论】:
-
请提供可重现的输入数据样本,以便我们了解您所指的内容。
-
如果有帮助,我用当前输出更新了帖子
-
请同时添加几行输入。
-
抱歉我没关注你?哪个输入数据?
-
请查看How to Ask。它期望在提出问题时提供最小的可重复输入。在这种情况下,
df来自'Surveys.csv'。这将有助于某人复制您的情况并让他们快速解决您的问题。