【发布时间】:2020-05-18 17:07:19
【问题描述】:
我有一个包含 6000 行和一列的数据框。我必须找到第二列的相同元素,但要最大化它们之间的距离。带有列表的示例是:
list = [2,1,3,1,2,4,5,1,3,2,1,5]
我希望输出是对:
(list[1], list[10])
有什么想法吗? 谢谢各位!
【问题讨论】:
标签: python python-3.x pandas dataframe find-occurrences
我有一个包含 6000 行和一列的数据框。我必须找到第二列的相同元素,但要最大化它们之间的距离。带有列表的示例是:
list = [2,1,3,1,2,4,5,1,3,2,1,5]
我希望输出是对:
(list[1], list[10])
有什么想法吗? 谢谢各位!
【问题讨论】:
标签: python python-3.x pandas dataframe find-occurrences
你可以试试这个。使用pd.Groupby.agg进行索引,并索引第一个元素和最后一个元素。
lst = [2,1,3,1,2,4,5,1,3,2,1,5]
df = pd.DataFrame(lst,columns=['vals'])
df=df.reset_index().groupby('vals').agg(['first','last'])
df
index
first last
vals
1 1 10
2 0 9
3 2 8
4 5 5
5 6 11
#The above df has multiIndex column to make it single index column
df.columns=df.columns.get_level_values(1)
df
first last
vals
1 1 10
2 0 9
3 2 8
4 5 5
5 6 11
或者您可以使用pd.NamedAgg 进行命名聚合。
df.reset_index().groupby('vals').agg(
first_occurrence=pd.NamedAgg(column='index',aggfunc='first'),
last_occurrence=pd.NamedAgg(column='index',aggfunc='last')
)
first_occurrence last_occurrence
vals
1 1 10
2 0 9
3 2 8
4 5 5
5 6 11
如果您希望它们与元组位于同一列中,请使用 df.apply
df['occurances']=df.vals.apply(lambda x:(df.index[df.vals==x][0],
df.index[df.vals==x][-1]))
df
vals occurances
0 2 (0, 9)
1 1 (1, 10)
2 3 (2, 8)
3 1 (1, 10)
4 2 (0, 9)
5 4 (5, 5)
6 5 (6, 11)
7 1 (1, 10)
8 3 (2, 8)
9 2 (0, 9)
10 1 (1, 10)
11 5 (6, 11)
【讨论】: