pandas 如何将同一个键的多行与一个不同的列值转换为一行,其中包含每个键的变量列的计数[重复]

mmvthczy  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(117)

此问题在此处已有答案

Get statistics for each group (such as count, mean, etc) using pandas GroupBy?(11个回答)
7天前关闭
我有一个结构像这样的框架:

pd.DataFrame(
    {'col1':['foo','foo','foo','foo','foo','foo'],'col2':['bar','bar','bar','bar','bar','bar'],'col3':['baz','baz','baz','baz','baz','baz'],'varying_column':['x','y','z','d','e','f']},index=['a','b','c','a','a','b']
    ).reset_index()

  my_key    col1    col2    col3    varying_column
0   a   foo bar baz x
1   b   foo bar baz y
2   c   foo bar baz z
3   a   foo bar baz d
4   a   foo bar baz e
5   b   foo bar baz f

字符串
其中每一行都有一个索引值,并且有一列是变化的。我想做的是通过创建一个新的列来为每个索引创建一行,该列是varying_column的计数,如下所示:

my_key    col1    col2    col3    count_varying_column
0   a   foo bar baz 3
1   b   foo bar baz 2
2   c   foo bar baz 1


我假设这可以通过做某种groupbyindex,计数varying_column,也许unstack来完成?
在我的真实的数据中,其他列也有不同的值,但这与这个问题无关,因此为了简单起见,我将它们保持不变。
注意事项:这不仅仅是一个简单的按集合分组,就像在this stack overflow thread中讨论的那样。是的,我想要每个组的计数,但是这个问题是不同的,因为我想删除varying_column的重复项,并将其替换为一个新的列,每个键值有一行,新的列count_varying_column是每个键varying_column的计数。

fcy6dtqo

fcy6dtqo1#

试试这个:

import pandas as pd
df = pd.DataFrame(
    {'col1':['foo','foo','foo','foo','foo','foo'],'col2':['bar','bar','bar','bar','bar','bar'],'col3':['baz','baz','baz','baz','baz','baz'],'varying_column':['x','y','z','d','e','f']},index=['a','b','c','a','a','b']
    ).reset_index()
df.groupby(['index','col1','col2','col3']).count().rename(columns={'varying_column':'count_varying_column'}).reset_index()

                      
  index col1 col2 col3  count_varying_column
0     a  foo  bar  baz                     3
1     b  foo  bar  baz                     2
2     c  foo  bar  baz                     1

字符串

wfveoks0

wfveoks02#

您可以将groupby方法与size结合使用来计算出现次数,然后将此结果与原始DataFrame合并以获得唯一行。之后,您可以根据'my_key'列删除重复行。
以下是您的操作方法:

df = pd.DataFrame({
    'my_key': ['a', 'b', 'c', 'a', 'a', 'b'],
    'col1': ['foo', 'foo', 'foo', 'foo', 'foo', 'foo'],
    'col2': ['bar', 'bar', 'bar', 'bar', 'bar', 'bar'],
    'col3': ['baz', 'baz', 'baz', 'baz', 'baz', 'baz'],
    'varying_column': ['x', 'y', 'z', 'd', 'e', 'f']
})
counts = df.groupby('my_key').size().reset_index(name='count_varying_column')
result = pd.merge(df.drop_duplicates(subset='my_key'), counts, on='my_key')
result = result.drop(columns=['varying_column'])

print(result)

字符串

相关问题