Python 基于两个要素对要素进行计数以生成两个新列
我一直在尝试根据两列生成列计数 我有A列,它是以0.5范围增量从0到1000的数据。(0.5、1、1.5…1000)和B列,B列为“是”、“否”。) 我正在尝试生成新的列C(是)和D(否) 这是0.5、1等时是和否的计数 大概是Python 基于两个要素对要素进行计数以生成两个新列,python,pandas,Python,Pandas,我一直在尝试根据两列生成列计数 我有A列,它是以0.5范围增量从0到1000的数据。(0.5、1、1.5…1000)和B列,B列为“是”、“否”。) 我正在尝试生成新的列C(是)和D(否) 这是0.5、1等时是和否的计数 大概是 0.5 Y 5 N 0.5 N 5 N 2 Y 3 N 会产生 0.5 Y 1 1 5 N 0 2 0.5 N 1 1 5 N 0 2 2
0.5 Y
5 N
0.5 N
5 N
2 Y
3 N
会产生
0.5 Y 1 1
5 N 0 2
0.5 N 1 1
5 N 0 2
2 Y 1 0
3 N 0 1
我使用groupby:
groupby('columnA')['ColumnB'].转换('count')
但它没有给我我想要的。用“Y”和“N”将它们分开,也不能完全满足我的要求
谢谢这应该适合你
data.groupby(['columnA', 'columnB']).count()
这应该对你有用
data.groupby(['columnA', 'columnB']).count()
方法1:
df=df.join( df.groupby('columnA')['columnB']
.value_counts()
.unstack(fill_value=0) ,on='columnA' )
print(df)
方法2
df=df.join( df.groupby(['columnA','columnB'])
.size()
.unstack(fill_value=0), on='columnA' )
print(df)
输出
columnA columnB N Y
0 0.5 Y 1 1
1 5.0 N 2 0
2 0.5 N 1 1
3 5.0 N 2 0
4 2.0 Y 0 1
5 3.0 N 1 0
方法1:
df=df.join( df.groupby('columnA')['columnB']
.value_counts()
.unstack(fill_value=0) ,on='columnA' )
print(df)
方法2
df=df.join( df.groupby(['columnA','columnB'])
.size()
.unstack(fill_value=0), on='columnA' )
print(df)
输出
columnA columnB N Y
0 0.5 Y 1 1
1 5.0 N 2 0
2 0.5 N 1 1
3 5.0 N 2 0
4 2.0 Y 0 1
5 3.0 N 1 0
当然可以第三列是第一列中的值在所有值中出现的Y(第二列)数。第四列是该计数在所有列上出现的“N”的计数。我可以手动按第1列和第2列中的每个值进行拆分,分别计算每个值,然后将它们合并在一起,但我发现有一种非常简单的方法我没有找到。当然!第三列是第一列中的值在所有值中出现的Y(第二列)数。第四列是该计数在所有列上出现的“N”的计数。我可以手动按第1列和第2列中的每个值进行拆分,逐个计算,然后将它们合并在一起,但我发现有一种非常简单的方法我没有找到。谢谢你的回复。我过去也试过,它没有给出我想要的格式。我正在试图找出如何使它直接进入/映射到我的两个新列中。将此输出连接到列A和B上的现有表对您有用吗?谢谢您的回复。我过去也试过,它没有给出我想要的格式。我正试图找出如何使它直接进入/映射到我的两个新列中。将其输出连接到A列和B列上的现有表对您有用吗?该死,这是可行的,但产生了数亿行。使用df.loc[~df.index.duplicated(keep='first')]删除它们很有效。有没有办法不生成所有额外的事例?我忘了这里有必要使用concat,而不是通过重复的行进行连接,现在请检查:)谢谢,由于某种原因,这会生成一些额外的列,并为它们提供Nan值。而以前,如果我删除了重复项,则是正确的。@abhilb's正确生成了它们。@ansev我只是在发布我的解决方案后才看到你的帖子。我会删除我的。不需要诽谤我删除了
pd.concat
方法。我建议您使用方法1。在大数据帧中,它可能会更快。我很乐意帮忙:)妈的,行得通,但是排了数亿行。使用df.loc[~df.index.duplicated(keep='first')]删除它们很有效。有没有办法不生成所有额外的事例?我忘了这里有必要使用concat,而不是通过重复的行进行连接,现在请检查:)谢谢,由于某种原因,这会生成一些额外的列,并为它们提供Nan值。而以前,如果我删除了重复项,则是正确的。@abhilb's正确生成了它们。@ansev我只是在发布我的解决方案后才看到你的帖子。我会删除我的。不需要诽谤我删除了pd.concat
方法。我建议您使用方法1。在大数据帧中,它可能会更快。我很乐意帮忙:)