使用样本数据:
df = pd.DataFrame({'key1' : ['a','a','b','b','a'],
'key2' : ['one', 'two', 'one', 'two', 'one'],
'data1' : np.random.randn(5),
'data2' : np. random.randn(5)})
df
data1 data2 key1 key2
0 0.361601 0.375297 a one
1 0.069889 0.809772 a two
2 1.468194 0.272929 b one
3 -1.138458 0.865060 b two
4 -0.268210 1.250340 a one
我试图弄清楚如何按key1分组数据并仅对key2等于“ one”的data1值求和。
这是我尝试过的
def f(d,a,b):
d.ix[d[a] == b, 'data1'].sum()
df.groupby(['key1']).apply(f, a = 'key2', b = 'one').reset_index()
但这给了我一个数值为“无”的数据框
index key1 0
0 a None
1 b None
这里有什么想法吗?我正在寻找与以下SQL等效的Pandas:
SELECT Key1, SUM(CASE WHEN Key2 = 'one' then data1 else 0 end)
FROM df
GROUP BY key1
提前致谢
首先按key1列分组:
In [11]: g = df.groupby('key1')
然后为每个组取subDataFrame,其中key2等于“ one”并求和data1列:
In [12]: g.apply(lambda x: x[x['key2'] == 'one']['data1'].sum())
Out[12]:
key1
a 0.093391
b 1.468194
dtype: float64
为了解释发生了什么,让我们看一下“ a”组:
In [21]: a = g.get_group('a')
In [22]: a
Out[22]:
data1 data2 key1 key2
0 0.361601 0.375297 a one
1 0.069889 0.809772 a two
4 -0.268210 1.250340 a one
In [23]: a[a['key2'] == 'one']
Out[23]:
data1 data2 key1 key2
0 0.361601 0.375297 a one
4 -0.268210 1.250340 a one
In [24]: a[a['key2'] == 'one']['data1']
Out[24]:
0 0.361601
4 -0.268210
Name: data1, dtype: float64
In [25]: a[a['key2'] == 'one']['data1'].sum()
Out[25]: 0.093391000000000002
通过将数据帧限制为仅那些key2等于1的数据帧,可能会更容易/更清楚地做到这一点:
In [31]: df1 = df[df['key2'] == 'one']
In [32]: df1
Out[32]:
data1 data2 key1 key2
0 0.361601 0.375297 a one
2 1.468194 0.272929 b one
4 -0.268210 1.250340 a one
In [33]: df1.groupby('key1')['data1'].sum()
Out[33]:
key1
a 0.093391
b 1.468194
Name: data1, dtype: float64
我需要将以下查询转换为hibernate条件查询。请帮忙 由于投票表上的复合主键,我用@Embeddable分隔了主键,所以后面的createQuery不起作用 和可嵌入对象 请建议一个更好的方法。
我试图为数据集创建多水平条形图。这些数据涉及跑步比赛的比赛时间。 Dataframe有以下列:名称、年龄组、完成时间、完成地点、家乡。下面是示例数据。 我想创建一个类似下图的条形图。每个年龄组将有一个条形图,最快的跑步者在图表的底部,跑步者的名字与城市和次数跑了比赛低于他们的名字。 我需要一个for循环还是一个简单的groupby工作?每个年龄组的数量和大小可以根据种族动态变化,因此它不是一个常数
当我使用或方法时,我得到了错误的结果。 例如: 在另一种方法中,我只得到结果1 我得到了正确的结果。 当使用方法时,我得到了错误的结果。 https://github.com/laravel/framework/issues/14123 忘了说,我的laravel版本信息: 项目中的实际问题 我有一张充电记录表。 1.pay日志表 1.1支付日志talbe数据 2.说明 在pay_log表中,1和
我正在使用SpringMVC4和EclipseLink 2.5开发一个web应用程序。Windows 7中的0和MySQL 5.6。我使用criteria(criteria Builder和CriteriaQuery)从数据库中获取所有字段的总和。我想要实现的是本机MySQL中与此语句等价的内容。 注:che_monto是一个数字(10,2)字段。 我遇到的问题是,在一些教程中没有说明如何实现这一
问题内容: 我正在尝试使用具有相似列值的行来估算值。 例如,我有这个数据框 我想使用相似的列[‘one’]和[‘two’]的键,并且如果列[‘three’]并非完全是nan,则从具有相似的键的行中插值[ ‘3’] 这是我的愿望结果 您会看到键1和3不包含任何值,因为现有值不存在。 我试过使用groupby fillna() 这给了我一个错误。 我尝试了正向填充,这给了我一个相当奇怪的结果,那就是它
我想将流中的项目收集到一个映射中,该映射将相等的对象分组在一起,并映射到出现的次数。 因此,在本例中,我希望地图由以下条目组成: 我该怎么做?