多索引分类和在PySp中编码

2024-06-16 14:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多索引映射规则,下面是规则

Type A: Chicken, Beef, Goat
Type B: Fish, Shrimp
Type C: Chicken, Pork

这是我的数据帧,假设这是一个df数据帧,并且想要做多索引映射

^{pr2}$

使用pandas,可以使用pd.MultiIndex和{}。所以,密码是

from pandas import pd
from numpy.core.defchararray import find

m = {
    'Type A': ['Chicken', 'Beef', 'Goat'],
    'Type B': ['Fish', 'Shrimp'],
    'Type C': ['Chicken', 'Pork']
}

mux = pd.MultiIndex.from_tuples(
    [(k, v) for k, values in m.items() for v in values])

df.join(
    df.Menu.str.get_dummies(sep=' ') \
      .reindex(columns=mux, level=1).max(axis=1
, level=0)
)

输出应该是这样的

 id     Menu                 Type A   Type B   Type C
   1    Fried Chicken        1        0        1
   2    Shrimp Chips         0        1        0
   3    Pork with Cheese     0        0        1
   4    Fish Spaghetti       0        1        0
   5    Goat Sate            1        0        0
   6    Beef Soup            1        0        0

如何在pySpark datafarame上执行此操作


Tags: 数据fromimportpandasdf规则typepd
1条回答
网友
1楼 · 发布于 2024-06-16 14:50:31

spark中没有标准的多重索引。在

您可以检查字符串是否包含任何元素:

from pyspark.sql import functions as F

index_dict = {
    'Type A': ['Chicken', 'Beef', 'Goat'],
    'Type B': ['Fish', 'Shrimp'],
    'Type C': ['Chicken', 'Pork']
}

for col_name, values in index_dict.items():
    col = F.col('Menu').like('%'+values[0]+'%')
    for value in values[1:]:
        col2 = F.col('Menu').like('%'+value+'%')
        col = col | col2
    df = df.withColumn(col_name, col)

我想如果你知道分隔符的时候不检查整根弦,可能会更快。因此,您可以使用:

df = df.withColumn('tmp', F.split(df['Menu'], ' '))

F.col('Menu').like('%'...'%')替换为F.array_contains(F.col('tmp'), ...)

并以df = df.drop('tmp')结束

相关问题 更多 >