另一列中的Pandas除以职业

yruzcnhs  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(91)

我试图将一列除以另一列中某个票号的占用量。

虽然在这里并不完全清楚,但票价是由共享一个票号的乘客总数组成的,所以我想将其分割以获得个人票价。我希望输出结果是票价除以相同票号的乘客总数。是在新列中还是在已经存在的Fare列中是次要的。应该计算出现次数的列是“机票”,“票价”列应该除以特定“机票”值下的条目数量。
完整的数据集可在这里:https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv
到目前为止,我已经尝试在字典中输入occupational并使用value_counts()方法,但我一直遇到一个不可散列的对象错误。
感谢您的帮助!

bzzcjhmw

bzzcjhmw1#

使用groupby_transformsize广播到每一行,然后您可以将单个Fare除以同一张票的数量:

# df['NumTickets'] = df.groupby('Ticket').transform('size')  # For demo purpose only
df['FarePerTicket'] = df['Fare'] / df.groupby('Ticket').transform('size')

输出量:

>>> df[['Ticket', 'Fare', 'NumTickets', 'FarePerTicket']]
               Ticket     Fare  NumTickets  FarePerTicket
0           A/5 21171   7.2500           1         7.2500
1            PC 17599  71.2833           1        71.2833
2    STON/O2. 3101282   7.9250           1         7.9250
3              113803  53.1000           2        26.5500  # 2 tickets 113803
4              373450   8.0500           1         8.0500
..                ...      ...         ...            ...
886            211536  13.0000           1        13.0000
887            112053  30.0000           1        30.0000
888        W./C. 6607  23.4500           2        11.7250  # 2 tickets W./C. 6607
889            111369  30.0000           1        30.0000
890            370376   7.7500           1         7.7500

门票数量:

>>> df.value_counts('Ticket')
Ticket
1601        7
CA. 2343    7
347082      7
CA 2144     6
347088      6
           ..
345572      1
345364      1
343276      1
343275      1
347464      1
Name: count, Length: 681, dtype: int64

替代(不推荐):

df['Fare'] / df['Ticket'].map(df.value_counts('Ticket'))

相关问题