Python的熊猫KeyError异常: '标签不在[指数]'
我有索引的duplicates_to_fetch
数据帧:Python的熊猫KeyError异常: '标签不在[指数]'
mail_domaine Values
0 @A.com [0, 2]
1 @B.com [1, 4]
和以下df_to_rearrange
数据帧
movie_name df_pname
0 A [mr a]
1 B [mr b]
2 Aa [mr aa]
3 D [mr d]
4 Bb [mr Bb, mr Bbb]
5 E [mr e]
我想具有以下转换后的数据帧
movie_name df_pname
0 [A, Aa] [mr a, mr aa]
1 [B, Bb] [mr b, mr Bb, mr Bbb]
3 [D] [mr d]
5 [E] [mr e]
但是......当我放下行,算法停止,因为缺少指数
我不喜欢
for i in range(0,len(druplicates_to_fetch)):
mylist = duplicates_to_fetch.loc[i,"Values"]
index_to_fetch_on = mylist[0]
# rearrange mylist (which can have >2 values)
mylist = [myindex for myindex in mylist if myindex != index_to_fetch_on]
for j in mylist:
df_to_rearrange.loc[index_to_fetch, "df_pname"].append(df_to_rearrange.loc[j, "df_pname"])
df_to_rearrange.drop(df_to_rearrange.index[j], inplace=True)
的错误是以下KeyError: 'the label [179] is not in the [index]'
。那里有更多的Pythonic方式来做到这一点?
一种解决方案是
df_to_rearrange.drop(df_to_rearrange.index[np.where((df_to_rearrange.index==j))], inplace=True)
这里的另一种方式来做到这一点。在使用范围为lookup
组和agg
的列list
In [78]: lookup = {v: i for i, x in enumerate(duplicates_to_fetch['Values']) for v in x}
In [79]: (df_to_rearrange.groupby(df_to_rearrange.index.to_series().map(lookup).fillna(''))
.agg({'movie_name': lambda x: [v for v in x],
'df_pname': lambda x: [a for v in x.values for a in v]})
.reset_index(drop=True))
Out[79]:
movie_name df_pname
0 [A, Aa] [mr a, mr aa]
1 [B, Bb] [mr b, mr Bb, mr Bbb]
2 [D] [mr d]
详细
In [959]: duplicates_to_fetch
Out[959]:
mail_domaine Values
0 @A.com [0, 2]
1 @B.com [1, 4]
In [960]: df_to_rearrange
Out[960]:
movie_name df_pname
0 A [mr a]
1 B [mr b]
2 Aa [mr aa]
3 D [mr d]
4 Bb [mr Bb, mr Bbb]
In [958]: lookup
Out[958]: {0: 0, 1: 1, 2: 0, 4: 1}
问题是'lambda x:list(x)',但这是由于我的数据 –
现在更新为这种情况 – Zero
您的代码将我的df从1135减少到37而不是1094(我的脚本完全呈现我想要的)。出于某种原因(group_by我认为),您的代码将一组1781个值! 也许如果你用'[mr E]'添加一行'E',你会看到pb –
迭代用'对于i(0,LEN(duplicates_to_fetch)):MYLIST = duplicates_to_fetch.loc [我,“价值观”]是笨重的。更好的办法是:'为我,duplicate_row in duplicates_to_fetch.iterrows()' – smci
另外,'mylist = [ix for ix in mylist if ix!= index_to_fetch_on]'看起来像一个简单的'drop()'操作。 – smci