我有一个3列的熊猫数据框:source_name
,dest_address
和fall_between
。我想按前两列进行分组,并根据fall_between
列创建2个新列。 df是这样的:
df
source_name dest_address fall_between
0 source_1 72.21.215.90 False
1 source_1 72.21.215.90 False
2 source_1 72.21.215.90 False
3 source_1 72.21.215.90 False
4 source_1 131.107.0.89 False
5 source_1 131.107.0.89 False
6 source_2 69.63.191.1 False
7 source_2 69.63.191.1 True
8 source_2 69.63.191.1 True
9 source_2 69.63.191.1 True
10 source_2 69.63.191.1 True
所需的输出:
df
source_name dest_address true_count false_count
0 source_1 72.21.215.90 0 4
1 source_1 131.107.0.89 0 2
2 source_2 69.63.191.1 4 1
我使用的是以下内容,但如果为0,则无法计数。哪种更好的方法呢?
df[df['fall_between'] == True].groupby(['source_name','dest_address']).size().reset_index(name='true_count')
df[df['fall_between'] == False].groupby(['source_name','dest_address']).size().reset_index(name='false_count')
答案 0 :(得分:4)
您可以使用pd.crosstab
:
pd.crosstab([df.source_name, df.dest_address], df.fall_between).reset_index()
fall_between source_name dest_address False True
0 source_1 131.107.0.89 2 0
1 source_1 72.21.215.90 4 0
2 source_2 69.63.191.1 1 4
答案 1 :(得分:2)
由于您要包含0,所以我想知道使用.value_counts()
是否更有意义。
看看:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html