pandas - 使用基于其他列 pandas 中的值的拆分和索引来处理一列中的数据

标签 pandas dataframe indexing split vectorization

我想知道是否有更好的方法来解决以下问题

我有一个具有以下示例结构的数据框:

<表类=“s-表”> <标题> 分割键 标签 子标签 <正文> A_B_C 7 “” A_B_C 7 “” A_B_C 8 “” A_B_C 8 “” A_B_C 10 “” A_B_C 10 “” D_E_F 2 “” D_E_F 7 “” D_E_F 15 “” G_H_I 1 “” G_H_I 2 “” G_H_I 3 “”

我希望使用一个值填充 sub_label,该值对应于在“_”字符上拆分 Split_key 中的值,并根据标签获取正确的元素。正确的元素是在唯一排序的标签数组中 label 中的值的索引,这些标签在 Split_key 中共享相同的值。

此处显示了正确的最终结果。

<表类=“s-表”> <标题> 分割键 标签 子标签 <正文> A_B_C 7 一个 A_B_C 7 一个 A_B_C 8 B A_B_C 8 B A_B_C 10 C A_B_C 10 C D_E_F 2 D D_E_F 7 E D_E_F 15 F G_H_I 1 G G_H_I 2 H G_H_I 3 我

我最初的尝试在大型数据帧上非常慢:

for i,row in bigframe.iterrows():
    duplicates=bigframe[ bigframe["Split_key"]==row["Split_key"]]
    if len(row["Split_key"].split("_"))<1:
        continue
    if len(duplicates)==1:
            row["sub_label"]=row["Split_key"].split("_")[0]
    else:
        try:
              shift=sorted(duplicates["label"].unique().astype(int)).index(int(row["label"]))
        except:
            shift=0
        if (shift<len(row["Split_key"].split("_"))):
            row["sub_label"]=row["Split_key"].split("_")[shift]

有什么方法可以在 python/pandas 中向量化这段代码吗?我从上一篇文章中知道在 R 中使用 group/ungroup 可以实现这一点。

最佳答案

让我们尝试使用 groupbyfactorize 然后使用 map

df['new'] = df.groupby('Split_key',as_index=False).apply(lambda x :  pd.Series(x['label'].factorize()[0]).map(dict(enumerate(x['Split_key'].iloc[0].split('_'))))).values
df
Out[869]: 
   Split_key  label  sub_label new
0      A_B_C      7        NaN   A
1      A_B_C      7        NaN   A
2      A_B_C      8        NaN   B
3      A_B_C      8        NaN   B
4      A_B_C     10        NaN   C
5      A_B_C     10        NaN   C
6      D_E_F      2        NaN   D
7      D_E_F      7        NaN   E
8      D_E_F     15        NaN   F
9      G_H_I      1        NaN   G
10     G_H_I      2        NaN   H
11     G_H_I      3        NaN   I

关于pandas - 使用基于其他列 pandas 中的值的拆分和索引来处理一列中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72722941/

相关文章:

r - 使用R//redux向redis传输数据

mysql - 如何优化 MySQL 索引/查询以进行模块化搜索?

mysql - 如何为不同的单列子句索引表

sql-server - 合并索引查找

python - scikit learn 中不同数据类型的自定义管道

python - 获取 pandas groupby 中元组值列的 idxmax 或 idxmin

Python Pandas - 按小时求和 bool 变量

python - Pandas 根据索引与多个系列相交

python - df.items() 和 df.iteritems() 之间的区别

python - 如果列下该行中的任何单元格不是 float ,如何删除 Dataframe 中的行?