我有一个类似的数据框
Bus_no. City
3412. Kolkata
7658. Nagpur
3412. Mumbai
5516. Kolkata
7658. Chennai
3412. Mumbai
我需要根据这些列进行动态计算,例如bus_no.3412在整个数据集中出现3次,在加尔各答出现1次,在孟买出现2次。因此,对于加尔各答的 3412,它将 = (1/3)*100,而对于孟买,则 = (2/3)*100。 同样,我需要计算每个bus_no。在每个城市。 我正在使用 python 3.6 。 请帮忙
因此,加尔各答的 3412 = (1/3)*100,孟买 = (2/3)*100。
同样我需要计算每个bus_no。在每个城市。
我正在使用Python 3.6。
请帮忙
您可以使用
groupby
和 size
来计算数据框中出现的次数,然后将得到的计数相除
import pandas as pd
#setup, ignore this
bus = ["3412.", "7658.", "3412.", "5516.", "7658.", "3412."]
city = ["Kolkata", "Nagpur", "Mumbai", "Kolkata", "Chennai", "Mumbai"]
dfdict = {"Bus_no.":bus, "City":city}
df = pd.DataFrame(dfdict)
# code here
grouped_df = df.groupby(["Bus_no.","City"]).size()/df.groupby("Bus_no.").size()
entries = df.groupby(["Bus_no.","City"]).size()
counts = df.groupby("Bus_no.").size()
print(grouped_df)
print(entries)
print(counts)
# Bus_no. City
# 3412. Kolkata 0.333333
# Mumbai 0.666667
# 5516. Kolkata 1.000000
# 7658. Chennai 0.500000
# Nagpur 0.500000
# dtype: float64
# Bus_no. City
# 3412. Kolkata 1
# Mumbai 2
# 5516. Kolkata 1
# 7658. Chennai 1
# Nagpur 1
# dtype: int64
# Bus_no.
# 3412. 3
# 5516. 1
# 7658. 2
# dtype: int64