我有两种方法来解决这个问题:
第一个涉及简单的循环,我在col_B 中获得time 值和col_Z 中的time 值:
# Import packages
import numpy as np
import pandas as pd
# Set up variables for new columns
names = np.unique(df['col_A'])
firstTimes = []
lastTimes = []
# Loop through name? in col_A of df
for name in names:
nameData = df.loc[df['col_A'] == name]
firstTime = nameData.to_numpy()[0,1]
lastTime = nameData.to_numpy()[-1,2]
firstTimes.append(firstTime)
lastTimes.append(lastTime)
# Create the dataframe
dNew = {'col_A': names, 'col_B': firstTimes, 'col_Z': lastTimes}
filteredDF = pd.DataFrame(data = dNew)
df 是您的示例 Pandas DataFrame,filteredDF 是新过滤的 DataFrame(如下所示):
col_A col_B col_Z
0 H time1 time6
1 R time1 time2
2 Sam time1 time4
第二个是假设col_B 和col_Z 中的值是Datetime 或Timestamp 值。我利用 Pandas 的 groupby() 函数对 col_A 中的每个值进行分组,然后将 col_B 的值聚合为最小值,将 col_Z 的值聚合为最大值:
dfNew = df.groupby('col_A').agg({'col_B':'min', 'col_Z':'max'}).reset_index()
例如,如果df 看起来像这样:
col_A col_B col_Z
0 Sam 1970-01-01 00:00:10 1970-01-01 00:00:20
1 Sam 1970-01-01 00:00:30 1970-01-01 00:00:40
2 R 1970-01-01 00:00:10 1970-01-01 00:00:20
3 H 1970-01-01 00:00:10 1970-01-01 00:00:20
4 H 1970-01-01 00:00:50 1970-01-01 00:01:00
那么dfNew 将如下所示(注意:col_A 按字母顺序排序):
col_A col_B col_Z
0 H 1970-01-01 00:00:10 1970-01-01 00:01:00
1 R 1970-01-01 00:00:10 1970-01-01 00:00:20
2 Sam 1970-01-01 00:00:10 1970-01-01 00:00:40
显然,如您所见,如果您使用可聚合的适当数据类型,方法 2 会简单得多!