python - Pandas 按 2 列分组并计算 T 和 F 的实例以创建 2 个新列

标签 python pandas pandas-groupby

<分区>

我有一个包含 3 列的 pandas 数据框:source_namedest_addressfall_between。我想按前 2 列分组并根据 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')

最佳答案

您可以使用 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

关于python - Pandas 按 2 列分组并计算 T 和 F 的实例以创建 2 个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697167/

相关文章:

python - Pandas groupby 具有滚动日期偏移的多列 - 如何?

python - 无法格式化字符串

Python 和 Pandas : match and transpose

python - 使用 pandas 从 CSV 加载随机样本

mysql - 如何在pandas中使用to_sql

python - 如何使用 GroupBy.agg() 从 TimeSeries 数据中获取 'Start' 和 'End'?

python - python中的分段列表理解

python - 如何在matplotlib中将 'underbar'放在字母(下划线字符)下面?

python - 如何从随意的 .dat 文件创建 Pandas df?

python - bool 列上的条件 DataFrame 过滤器?