Pandas - 如何进行分组,其中新列是(列的总和)/(分组的项目数)的结果?
Pandas - How to make a groupment in which a new column is the result of (sum of a column)/(number of itens grouped)?
我需要进行某种分组,其中新列(结果)是值列的总和除以找到的项目数?有谁能帮帮我吗?
例如:
Table一个
+-------+------+
| item | value|
+-------+------+
| x | 100 |
| y | 200 |
| y | 400 |
+-------+------+
正确结果:
Table B
+-------+-----------+
| item | result |
+-------+-----------+
| x | 100/1 |
| y |(200+400)/2|
+-------+-----------+
代码:
d = {'item': ['x', 'y', 'y'], 'value': [100,200,400]}
df = pd.DataFrame(data=d)
df
您可以使用 DataFrameGroupBy.agg
:
s = df.groupby('item')['value'].agg(lambda x: x.sum()/len(x))
print (s)
item
x 100
y 300
Name: value, dtype: int64
或除以GroupBy.sum
with GroupBy.size
:
g = df.groupby('item')['value']
s = g.sum() / g.size()
print (s)
item
x 100.0
y 300.0
Name: value, dtype: float64
但是 sum/size
是 mean
,所以解决方案应该简化为 GroupBy.mean
:
s = df.groupby('item')['value'].mean()
print (s)
item
x 100
y 300
Name: value, dtype: int64
我需要进行某种分组,其中新列(结果)是值列的总和除以找到的项目数?有谁能帮帮我吗?
例如:
Table一个
+-------+------+
| item | value|
+-------+------+
| x | 100 |
| y | 200 |
| y | 400 |
+-------+------+
正确结果:
Table B
+-------+-----------+
| item | result |
+-------+-----------+
| x | 100/1 |
| y |(200+400)/2|
+-------+-----------+
代码:
d = {'item': ['x', 'y', 'y'], 'value': [100,200,400]}
df = pd.DataFrame(data=d)
df
您可以使用 DataFrameGroupBy.agg
:
s = df.groupby('item')['value'].agg(lambda x: x.sum()/len(x))
print (s)
item
x 100
y 300
Name: value, dtype: int64
或除以GroupBy.sum
with GroupBy.size
:
g = df.groupby('item')['value']
s = g.sum() / g.size()
print (s)
item
x 100.0
y 300.0
Name: value, dtype: float64
但是 sum/size
是 mean
,所以解决方案应该简化为 GroupBy.mean
:
s = df.groupby('item')['value'].mean()
print (s)
item
x 100
y 300
Name: value, dtype: int64