python/pandas中长格式数据帧的分块
我有一个长格式的数据框,表示在一段时间内,在多种条件下,许多动物的值。 现在,我想应用binning,以便在保持动物和条件分离的同时,平均多个时间点的值 我尝试了一系列冗长的python/pandas中长格式数据帧的分块,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个长格式的数据框,表示在一段时间内,在多种条件下,许多动物的值。 现在,我想应用binning,以便在保持动物和条件分离的同时,平均多个时间点的值 我尝试了一系列冗长的取消堆栈、分组方式和堆栈操作,但我认为应该有一种简洁的方法来实现这一点 基本上,我想从左边的桌子转到右边的桌子: 我想您需要使用groupby: bins = [0, 4, 9] labels=['1-4','5-8'] df['bin'] = pd.cut(df['time'], bins=bins, labels=la
取消堆栈
、分组方式
和堆栈
操作,但我认为应该有一种简洁的方法来实现这一点
基本上,我想从左边的桌子转到右边的桌子:
我想您需要使用groupby
:
bins = [0, 4, 9]
labels=['1-4','5-8']
df['bin'] = pd.cut(df['time'], bins=bins, labels=labels)
print (df)
animal condition time val bin
0 1 a 1 0.394700 1-4
1 1 b 2 0.492167 1-4
2 2 a 1 0.402880 1-4
3 2 b 2 0.354298 1-4
4 1 a 3 0.500614 1-4
5 1 b 4 0.445177 1-4
6 2 a 3 0.090433 1-4
7 2 b 4 0.273563 1-4
8 1 a 5 0.943477 5-8
9 1 b 6 0.026545 5-8
10 2 a 5 0.039999 5-8
11 2 b 6 0.283140 5-8
12 1 a 7 0.582344 5-8
13 1 b 8 0.990893 5-8
14 2 a 7 0.992642 5-8
15 2 b 8 0.993117 5-8
print (df.groupby(['bin','animal','condition'], as_index=False).val.mean())
bin animal condition val
0 1-4 1 a 0.447657
1 1-4 1 b 0.468672
2 1-4 2 a 0.246657
3 1-4 2 b 0.313931
4 5-8 1 a 0.762911
5 5-8 1 b 0.508719
6 5-8 2 a 0.516320
7 5-8 2 b 0.638129
不创建新列的解决方案:
print (df.groupby([pd.cut(df['time'],
bins=[0, 4, 9],
labels=['1-4','5-8']), 'animal','condition'])
.val.mean().reset_index())
print (df.groupby([pd.cut(df['time'],
bins=[0, 4, 9],
labels=['1-4','5-8']), 'animal','condition'])
.val.mean().reset_index())