我在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.crosstab
,pandas.merge
和pivot tables
,但它们都没有提供明显的方法来实现这一目标。 groupby
似乎很有希望,但是我还不太清楚如何使它尊重现有的边界。
答案 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')