gpt4 book ai didi

python - pandas 中是否有一个函数可以将行与匹配的标识符对齐并用 NaN 填充空白?

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:54 25 4
gpt4 key购买 nike

我正在 pandas 中寻找一个将数据对齐到不同列的函数。例如,我有四列,两个时间,两个是标识符。

id    time    id    time

a , 1:10, a , 1:11

a , 1:12 , a , 1:13

b , 1:13 c , 1:15

c , 1:14

d , 1:15

我想将 id 为 c 的行相互匹配并得到以下结果:

id  time  id  time 

a , 1:10, a , 1:11

a , 1:12, a , 1:13

b , 1:13, NaN, NaN

c, 1:14, c , 1:15

d , 1:15, NaN, NaN

我的数据位于带有相应标签的数据框中。我尝试过循环来查找匹配项并重新索引,但遇到了错误。我可能有数千个条目,其中有许多缺失点。

A = pd.DataFrame({'Error Time':array1[:,0],'Err ID':array1[:,1],'Alert 
Type':array1[:,2]})
B = pd.DataFrame({'Recover Time':array2[:,0], 'Rec ID':array2[:,1]})
data_array = pd.concat([A,B], axis=1) #Joins the two arrays together
pd.to_datetime(data_array['Error Time'],format='%H:%M:%S.%f').dt.time
pd.to_datetime(data_array['Recover Time'],format='%H:%M:%S.%f').dt.time

#data_array = data_array.sort_values(by=['Error Time'])
col_size = len(data_array['Error Time'])
for i in range(col_size):
if data_array.iloc[i,1] == data_array.iloc[i,3]:
indexA.append(i)
else:
for j in range(col_size):
if data_array.iloc[i,1] == data_array.iloc[j,3]:
if indexA.count(j) > 0:
j = j + 1
else:
indexA.append(j)
break
for k in range(col_size):
if indexA.count(k)== 0:
indexA.append(k)
data_array = data_array.reindex(['Error Time', 'Error ID', 'Alert
Type],index=[indexA])

最佳答案

df1 = pd.DataFrame({'ID':['a','a','b','c','d'],'Time':['1:10','1:12','1:13','1:14','1:15']})
df2 = pd.DataFrame({'ID':['a','a','c'],'Time':['1:11','1:13','1:15']})

A = df1.assign(C=df1.groupby('ID').cumcount())
B = df2.assign(C=df2.groupby('ID').cumcount())

A.merge(B, on=['ID', 'C'], how='outer').drop('C', 1)

输出:

    ID  Time_x  Time_y
0 a 1:10 1:11
1 a 1:12 1:13
2 b 1:13 NaN
3 c 1:14 1:15
4 d 1:15 NaN

关于python - pandas 中是否有一个函数可以将行与匹配的标识符对齐并用 NaN 填充空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327771/

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