Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于两个要素对要素进行计数以生成两个新列_Python_Pandas - Fatal编程技术网

Python 基于两个要素对要素进行计数以生成两个新列

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

我一直在尝试根据两列生成列计数 我有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      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。在大数据帧中,它可能会更快。我很乐意帮忙:)