Pandas:合并重复的索引值
Pandas: combining duplicate index values
我有一个 pandas 系列,我想用三种不同的方式组合起来。系列如下:
import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
series = pd.Series(quantities, index=timestamps)
显然时间戳有3 values of 1
、1 value of 2
、3 values of 3
和1 value of 1
。我想生成以下系列:
1.重复索引值之和:
pd.Series([12,6,17,0], index=[1,2,3,4])
2。重复索引值的中位数:
pd.Series([2,6,7,0], index=[1,2,3,4])
2。重复索引值个数:
pd.Series([3,1,3,1], index=[1,2,3,4])
在 numpy
中,我将使用 unique_elements_to_indices
方法实现此目的:
from typing import Dict
import numpy as np
def unique_elements_to_indices(array: np.array) -> Dict:
mapping = {}
for unique_element in np.unique(array):
mapping[unique_element] = np.where(array == unique_element)[0]
return mapping
...然后我将遍历 unique_elements
并使用 np.where
找到给定 unique_element
.
的 quantities
有什么办法可以在 pandas 内快速实现这个目标吗?
谢谢。
这里可能使用函数 sum
,median
用于单独输出,参数 level=0
用于按索引聚合:
print (series.sum(level=0))
print (series.median(level=0))
但一般按索引聚合,函数为:
print (series.groupby(level=0).sum())
print (series.groupby(level=0).median())
#difference between count and size is count exclude NaNs values
print (series.groupby(level=0).size())
print (series.groupby(level=0).count())
如果需要一起创建新的 DataFrame,请使用 GroupBy.agg
和聚合函数列表:
print(series.groupby(level=0).agg(['sum', 'median', 'size']))
您可以为此使用 .groupby
:
import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
sr = pd.Series(quantities, index=timestamps)
print(sr.groupby(sr.index).sum())
print(sr.groupby(sr.index).median())
print(sr.groupby(sr.index).count())
当您使用 pandas 库时,建议将您的数据转换为数据框。最简单的方法如下 pandas
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
d = {'quantities': quantities, 'timestamps': timestamps}
df = pd.DataFrame(d)
df.groupby('timestamps').sum().reset_index()
类似的方法你也可以使用其他功能。如果这对你有用,请告诉我。
我有一个 pandas 系列,我想用三种不同的方式组合起来。系列如下:
import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
series = pd.Series(quantities, index=timestamps)
显然时间戳有3 values of 1
、1 value of 2
、3 values of 3
和1 value of 1
。我想生成以下系列:
1.重复索引值之和:
pd.Series([12,6,17,0], index=[1,2,3,4])
2。重复索引值的中位数:
pd.Series([2,6,7,0], index=[1,2,3,4])
2。重复索引值个数:
pd.Series([3,1,3,1], index=[1,2,3,4])
在 numpy
中,我将使用 unique_elements_to_indices
方法实现此目的:
from typing import Dict
import numpy as np
def unique_elements_to_indices(array: np.array) -> Dict:
mapping = {}
for unique_element in np.unique(array):
mapping[unique_element] = np.where(array == unique_element)[0]
return mapping
...然后我将遍历 unique_elements
并使用 np.where
找到给定 unique_element
.
quantities
有什么办法可以在 pandas 内快速实现这个目标吗?
谢谢。
这里可能使用函数 sum
,median
用于单独输出,参数 level=0
用于按索引聚合:
print (series.sum(level=0))
print (series.median(level=0))
但一般按索引聚合,函数为:
print (series.groupby(level=0).sum())
print (series.groupby(level=0).median())
#difference between count and size is count exclude NaNs values
print (series.groupby(level=0).size())
print (series.groupby(level=0).count())
如果需要一起创建新的 DataFrame,请使用 GroupBy.agg
和聚合函数列表:
print(series.groupby(level=0).agg(['sum', 'median', 'size']))
您可以为此使用 .groupby
:
import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
sr = pd.Series(quantities, index=timestamps)
print(sr.groupby(sr.index).sum())
print(sr.groupby(sr.index).median())
print(sr.groupby(sr.index).count())
当您使用 pandas 库时,建议将您的数据转换为数据框。最简单的方法如下 pandas
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
d = {'quantities': quantities, 'timestamps': timestamps}
df = pd.DataFrame(d)
df.groupby('timestamps').sum().reset_index()
类似的方法你也可以使用其他功能。如果这对你有用,请告诉我。