我将数据存储在pandas数据框中,如下所示:
df1 = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],
'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
所以,我的数据看起来像这样
----------------------------
index A B
0 yes yes
1 yes no
2 yes no
3 yes no
4 no yes
5 no yes
6 yes no
7 yes yes
8 yes yes
9 no no
-----------------------------
我想将其转换为另一个数据框。预期的输出可以在以下python脚本中显示:
output = pd.DataFrame({'A':['no','no','yes','yes'],'B':['no','yes','no','yes'],'count':[1,2,4,3]})
因此,我的预期输出如下所示
--------------------------------------------
index A B count
--------------------------------------------
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
--------------------------------------------
实际上,我可以使用以下命令来找到所有组合并对其进行计数: mytable = df1.groupby(['A','B']).size()
但是,事实证明,此类组合在单个列中。我想将组合中的每个值分隔到不同的列中,并且还要为计数结果增加一列。有可能这样做吗?请问您有什么建议吗?先感谢您。
你可以groupby
上的cols“A”和“B”和呼叫size
,然后reset_index
和rename
生成列:
In [26]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[26]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
更新
简要说明一下,通过将2列分组,将A和B值相同的行分组,我们称之为size
返回唯一组数:
In[202]:
df1.groupby(['A','B']).size()
Out[202]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
现在,要还原分组的列,我们调用reset_index
:
In[203]:
df1.groupby(['A','B']).size().reset_index()
Out[203]:
A B 0
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
这将还原索引,但是大小聚合将变成生成的column 0
,因此我们必须重命名此名称:
In[204]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[204]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
groupby
确实接受了as_index
我们可以设置为的arg
,False
因此它不会使分组的列成为索引,但是这会生成a,series
并且您仍然必须还原索引,依此类推....:
In[205]:
df1.groupby(['A','B'], as_index=False).size()
Out[205]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
我有以下数据框: 我想将其转换为: i、 e.我希望保留前4列,但将剩余的每列值分配到单独的行中。有没有一种不使用for循环的方法来实现这一点?
我想使用两列作为行ID,同时计算基于时间的分组。请看下图: 转化成这样: 正在发生的是,X在时间10发生了0次,但在15和23发生了1次。 Y在10点钟发生了3次,但在15和23没有。等等。
问题内容: 看起来很丑: 不起作用: 是否存在上述“问题”的优雅且可行的解决方案? 问题答案: 使用isin
问题内容: 我遇到了一个看似简单的问题:在熊猫数据框中删除唯一的行。基本上与的相反。 假设这是我的数据: 当A和B唯一时,我想删除行,即我只保留行1和2。 我尝试了以下方法: 但是我只能得到第2行,因为唯一性是0、1和3! 问题答案: 选择所有重复行的解决方案: 您可以使用子集和参数来选择所有重复项: 解决方案: 对所有唯一行进行了一些修改的解决方案:
问题内容: 我有一个熊猫数据框。我想“落后”我的专栏之一。例如,这意味着将整个列“ gdp”上移一位,然后删除其余行底部的所有多余数据,以使所有列的长度再次相等。 无论如何要这样做? 问题答案:
我有一个df看起来是这样的: 现在我想创建一个名为temp_test的df,它显示日期、收入总和、唯一篮子ID的计数,最后还有一列每个篮子的平均收入。 但是,我的rev_per_basket列只显示了NAN。理想情况下,它应该显示226.66、475和450。知道哪里出了问题吗?谢谢!