如何通过查询压缩pandas行

2024-10-01 17:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫式的数据库

{Value:[1,2,3,4,5,6,7],Time:[0,0,0,1,1,1,1],Name:[Rat,Rat,Dog,Rat,Rat,Dog,Cat]}.

我的目标是创建一个

{Value:[1.5,4.5,3,6,7],Name:[RatT0,RatT1,DogT0,DogT1,CatT1]}.

我已经研究了pandas.crosstabpandas.mergepivot tables,它们都没有提供一个明显的方法来实现这一点groupby似乎很有希望,但我不太明白如何让它尊重预先存在的界限


Tags: name数据库目标pandastimevaluecatdog
2条回答

你到底想做什么?把1/0加到你的名字栏里

df = pd.DataFrame({'Value':[1,2,3,4,5,6,7],'Time':[0,0,0,1,1,1,1],
                   'Name':['Rat','Rat','Dog','Rat','Rat','Dog','Cat']})

df['new_name'] = df['Name'] + 'T' + df['Time'].astype('str')

修改name列,然后groupby+mean

df['Name'] = df.Name + 'T' + df.Time.astype('str')
df.groupby('Name', as_index=False).Value.mean()

    Name  Value
0  CatT1    7.0
1  DogT0    3.0
2  DogT1    6.0
3  RatT0    1.5
4  RatT1    4.5

为了举例说明,您希望用相同的'Time'形成具有相同'Name'的组,因此您将groupby这两列,并选择如何处理分组数据(在本例中,确定'Value'列的平均值)。然后,您可以修改名称使之成为您想要的,并删除冗余的'Time'

df = df.groupby(['Name', 'Time'], as_index=False).Value.mean()
#  Name  Time  Value
#0  Cat     1    7.0
#1  Dog     0    3.0
#2  Dog     1    6.0
#3  Rat     0    1.5
#4  Rat     1    4.5

df['Name'] = df.Name + 'T' + df.Time.astype('str')
df.drop(columns='Time', inplace=True)

相关问题 更多 >

    热门问题