我想在dataframe中基于它们之间可配置的差异来合并多个列
给定数据帧:
1 3 6 7 10
1 a
3 b f
4 c
6 d
8 e
如果范围\像素=1 输出将合并为=
1 3 6 10
1 a
3 b f
4 c
6 d
8 e
在标题[1,3,6,7,10]中: 只有6,7有差别<;=范围×像素(1) 因此,他们被合并并替换为6和7被删除
如果range=3,则应合并所有列,因为所有列之间都有差异<;=以下代码不起作用的范围=2
我希望有人能提供更好的方法
#creating DF
top = [1, 3, 6, 7, 1, 10]
left = [1, 3, 4, 6, 8, 3]
text = ['a', 'b', 'c', 'd', 'e', 'f']
new_line_match = dict()
for i in range(len(top)):
top_val = int(top[i])
left_val = int(left[i])
text_val = text[i]
if int(top_val) in new_line_match.keys():
val = new_line_match.get(int(top_val))
val.update({int(left_val): text_val})
new_line_match.update({int(top_val): val})
else:
val = {int(left_val): text_val}
new_line_match.update({int(top_val): val})
df=pd.DataFrame(new_line_match)
df.fillna("",inplace=True)
#custom length variable
range_pixel=2
#logic starts from here
list_cols=sorted(list(df.columns))
df_cols=pd.DataFrame(list_cols)
mask1=(df_cols[0].diff()<=range_pixel)
df_cols["b"]=(mask1|mask1.shift(-1).fillna(False))+0
df_cols["groups"]=df_cols["b"].diff().ne(0).cumsum()
column_list=list(df_cols[df_cols["b"]==1].groupby("groups")
[0].apply(lambda x:list(x)))
for x in column_list:
df[x[0]]=df[x].apply(lambda x: ''.join(x), axis=1)
df.drop(x[1:],axis=1,inplace=True)
print(df)
预期产量:
1 6 10
1 a
3 b f
4 c
6 d
8 e
电流输出:
1 10
1 a
3 b f
4 c
6 d
8 e
目前没有回答
相关问题 更多 >
编程相关推荐