pandas 中列的动态计算

问题描述 投票:0回答:1

我有一个类似的数据框

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。

请帮忙

python pandas group-by calculated-columns
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.