gpt4 book ai didi

python - 在python中选择带有pandas数据框的 bool 数组的行

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:22 26 4
gpt4 key购买 nike

我需要选择 mac 列中项目数大于计数(即 1)的行。然后用timestamp的最小值和最大值创建一个DataFrame。

a=np.array([['A',1],['A',2],['A',3],['B',2],['C',1],['C',2]])
df=pd.DataFrame(a,columns=['mac','timestamp'])
df
Out[103]:
mac timestamp
0 A 1
1 A 2
2 A 3
3 B 2
4 C 1
5 C 2

count_macs= df.groupby(['mac'])['mac'].count()>1
count_macs
Out[105]:
mac
A True
B False
C True
Name: mac, dtype: bool

我想得到:

mac     ts1     ts2
A 1 3
C 1 2

但不知道如何正确应用.loc:

df.loc[count_macs]
IndexingError: Unalignable boolean Series key provided

最佳答案

我想你需要agg maxminsize(如果不需要计算 NaN,则为 count ).然后按boolean indexing过滤,删除列并最后重命名列:

df = df.groupby('mac')['timestamp'].agg(['min','max', 'size'])
d = {'min':'t1','max':'t2'}
df = df[df['size'] > 1].drop('size', 1).rename(columns=d).reset_index()
#alternatively:
#df = df.query('size > 1').drop('size', 1).rename(columns=d).reset_index()

print (df)
mac t1 t2
0 A 1 3
1 C 1 2

另一种解决方案是先使用 duplicated 进行过滤:

df = df[df['mac'].duplicated(keep=False)]
d = {'min':'t1','max':'t2'}
df = df.groupby('mac')['timestamp'].agg(['min','max']).rename(columns=d).reset_index()
print (df)
mac t1 t2
0 A 1 3
1 C 1 2

关于python - 在python中选择带有pandas数据框的 bool 数组的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46463675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com