根据频率 table 和 python 计算每个地区的中位年龄
calculate the median age for each region from frequency table with python
我的数据框类似于:
我想计算每个城市的平均年龄,但考虑到它是一个频率 table,我发现这有点棘手。 pandas 或其他功能中是否有任何功能可以帮助我实现此目标?
对于每一行,找出其中的实例数。然后将该数字除以 2,并通过检查年龄是否小于我们正在寻找的人数来确定年龄。
例如,对于行 'alabama',您将添加 34 + 67 + ... + 23 = 5463。除以 2,将是 2731.5 ==> 2731。然后,检查每个年龄段,判断第2731个人在哪
- 1岁时,因为2731 > 34,检查下一个。
- 2岁时,由于2731 > 34 + 67,检查下一个。
- 3岁时,由于2731 > 34 + 67 + 89,检查下一个。
- 4岁时,由于2731 > 34 + 67 + 89 + 89,检查下一个。
- 5岁时,由于2731 > 34 + 67 + 89 + 89 + 67,检查下一个。
- 6岁时,由于2731 > 34 + 67 + 89 + 89 + 67 + 545,检查下一个。
- 在 7 岁时,因为 2731 < 34 + 67 + 89 + 89 + 67 + 545 + 4546,中位数必须在这个年龄组。
对每个 city/state 重复此操作,您应该得到每个的中位数。
也许这对你有用:
import numpy as np
import pandas as pd
# create dataframe
df = pd.DataFrame(
[
['Alabama', 34, 67, 89, 89, 67, 545, 4546, 3, 23],
['Georgia', 345, 65, 67, 32, 23, 567, 87, 647, 68]
],
columns=['City', 0, 1, 2, 3, 4, 5, 6, 7, 8]
).set_index('City')
print(df)
# calculate median for freq table
m = list() # median list
for index, row in df.iterrows():
v = list() # value list
z = zip(row.index, row.values)
for item in z:
for f in range(item[1]):
v.append(item[0])
m.append(np.median(v))
df_m = pd.DataFrame({'City': df.index, 'Median': m})
print(df_m)
输入:
0 1 2 3 4 5 6 7 8
City
Alabama 34 67 89 89 67 545 4546 3 23
Georgia 345 65 67 32 23 567 87 647 68
输出:
City Median
0 Alabama 6.0
1 Georgia 5.0
我的数据框类似于:
我想计算每个城市的平均年龄,但考虑到它是一个频率 table,我发现这有点棘手。 pandas 或其他功能中是否有任何功能可以帮助我实现此目标?
对于每一行,找出其中的实例数。然后将该数字除以 2,并通过检查年龄是否小于我们正在寻找的人数来确定年龄。
例如,对于行 'alabama',您将添加 34 + 67 + ... + 23 = 5463。除以 2,将是 2731.5 ==> 2731。然后,检查每个年龄段,判断第2731个人在哪
- 1岁时,因为2731 > 34,检查下一个。
- 2岁时,由于2731 > 34 + 67,检查下一个。
- 3岁时,由于2731 > 34 + 67 + 89,检查下一个。
- 4岁时,由于2731 > 34 + 67 + 89 + 89,检查下一个。
- 5岁时,由于2731 > 34 + 67 + 89 + 89 + 67,检查下一个。
- 6岁时,由于2731 > 34 + 67 + 89 + 89 + 67 + 545,检查下一个。
- 在 7 岁时,因为 2731 < 34 + 67 + 89 + 89 + 67 + 545 + 4546,中位数必须在这个年龄组。
对每个 city/state 重复此操作,您应该得到每个的中位数。
也许这对你有用:
import numpy as np
import pandas as pd
# create dataframe
df = pd.DataFrame(
[
['Alabama', 34, 67, 89, 89, 67, 545, 4546, 3, 23],
['Georgia', 345, 65, 67, 32, 23, 567, 87, 647, 68]
],
columns=['City', 0, 1, 2, 3, 4, 5, 6, 7, 8]
).set_index('City')
print(df)
# calculate median for freq table
m = list() # median list
for index, row in df.iterrows():
v = list() # value list
z = zip(row.index, row.values)
for item in z:
for f in range(item[1]):
v.append(item[0])
m.append(np.median(v))
df_m = pd.DataFrame({'City': df.index, 'Median': m})
print(df_m)
输入:
0 1 2 3 4 5 6 7 8
City
Alabama 34 67 89 89 67 545 4546 3 23
Georgia 345 65 67 32 23 567 87 647 68
输出:
City Median
0 Alabama 6.0
1 Georgia 5.0