如何通过查询来压缩熊猫行?

时间:2018-11-26 20:03:58

标签: python pandas

我在Pandas中有一个程式化的数据库

{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似乎很有希望,但是我还不太清楚如何使它尊重现有的边界。

2 个答案:

答案 0 :(得分:2)

修改名称列,然后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

为说明起见,您希望将相同的'Name'与相同的'Time'组成组,因此您将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)

答案 1 :(得分:0)

您到底想做什么?只需在您的姓名栏中添加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')