我有多索引映射规则,下面是规则
Type A: Chicken, Beef, Goat
Type B: Fish, Shrimp
Type C: Chicken, Pork
这是我的数据帧,假设这是一个df
数据帧,并且想要做多索引映射
使用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上执行此操作
spark中没有标准的多重索引。在
您可以检查字符串是否包含任何元素:
我想如果你知道分隔符的时候不检查整根弦,可能会更快。因此,您可以使用:
df = df.withColumn('tmp', F.split(df['Menu'], ' '))
将
F.col('Menu').like('%'...'%')
替换为F.array_contains(F.col('tmp'), ...)
并以
df = df.drop('tmp')
结束相关问题 更多 >
编程相关推荐