我想使用两列作为行ID,同时计算基于时间的分组。请看下图:
X Y Z Time
0 1 2 10
0 2 3 10
1 0 2 15
1 0 0 23
转化成这样:
Category Count Time
X 0 10
X 1 15
X 1 23
Y 3 10
Y 0 15
Y 0 23
Z 5 10
Z 2 15
Z 0 23
正在发生的是,X在时间10发生了0次,但在15和23发生了1次。
Y在10点钟发生了3次,但在15和23没有。等等。
我认为您需要melt
与groupby
聚合sum
和最后一个按列排序
类别
:
print pd.melt(df, id_vars='Time', var_name='Category', value_name='Count')
.groupby(['Time','Category']).sum().reset_index().sort_values('Category')
Time Category Count
0 10 X 0
3 15 X 1
6 23 X 1
1 10 Y 3
4 15 Y 0
7 23 Y 0
2 10 Z 5
5 15 Z 2
8 23 Z 0
另一个解决方案与
堆栈
:
df1 = df.set_index('Time')
.stack()
.groupby(level=[0,1])
.sum()
.reset_index()
.sort_values('level_1')
df1.columns = ['Time','Category','Count']
df1 = df1[['Category','Count','Time']]
print df1
Category Count Time
0 X 0 10
3 X 1 15
6 X 1 23
1 Y 3 10
4 Y 0 15
7 Y 0 23
2 Z 5 10
5 Z 2 15
8 Z 0 23
问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接:
问题内容: 我正在寻找一种方法来反向旋转数据框。据我所知,pandas提供了一种pivot或pivot_table方法将EAV df转换为“普通”方法。但是,还有一种方法可以做逆运算吗? 所以给定数据框: 我想将其转换为(EAV模型): 这样做最有效的方法是什么? 问题答案: 假设是索引,将执行以下操作: 如果不是索引,请像这样设置:
问题内容: 我有大熊猫表格数据框要转换为JSON。标准的.to_json()函数不会为JSON创建紧凑格式。如何仅使用pandas获得这样的JSON输出格式? 这是用于表格数据的JSON的一种非常紧凑的格式。(我可以在行上循环。…但是) 问题答案: 看来你需要先于: 由于尚未实现: ValueError:选项“ orient”的值“ list”无效 编辑: 如果index不是column,请添加:
问题内容: 有没有一种方法可以根据我的个人喜好(即不按字母或数字排序,而是更像遵循某些约定)对熊猫数据框中的列进行重新排序? 简单的例子: 产生这个: 但是,我想这样: (请提供通用解决方案,而不是针对此情况。非常感谢。) 问题答案: 只需输入列名称即可自己选择订单。请注意双括号:
我有一个熊猫数据框,它有语料库的术语频率,术语为行,年份为列,就像这样: 我希望能够通过将每个单词的值除以给定年份的总单词数来标准化它们——有些年份包含两倍多的文本,所以我试图按年缩放(像谷歌图书一样)。我已经看了如何缩放单个列的例子,克里斯·阿尔邦和我在SO上看到了缩放所有列的例子,但是每次我试图将这个数据框转换为一个数组来缩放时,事情都会窒息列这个词不是数字。(我尝试将术语列设置为索引,但不太
问题内容: 我有一个OHLC价格数据集,该数据集已从CSV解析为Pandas数据框,并重新采样为15分钟的柱形: 我想添加各种计算的列,从简单的列开始,例如期间范围(HL),然后是布尔值以指示我将定义的价格模式的出现-例如锤形蜡烛模式,为其定义示例: 基本问题:如何将函数映射到列,特别是在我想引用多个其他列或整行或其他内容的地方? 这篇文章处理从单个源列添加两个计算列,这是很接近的,但还不完全是。