gpt4 book ai didi

python - 基于以逗号分隔的列和其他两列的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:14 25 4
gpt4 key购买 nike

我有一个表格如下:

My Table

我想添加一列(评估),它返回汽车列中的一个元素(以逗号分隔)。返回的元素将基于 Ferrari 和 Toyota 列。 Evaluation 列返回个体没有的元素。所以以第一行为例,约翰有一辆法拉利,没有一辆丰田。由于约翰没有丰田,评估列返回丰田。

Result

我更愿意使用汽车列做出决定,用逗号分隔文本,并根据 Ferrari 和 Toyota 下的值查找文本

最佳答案

您可以使用:

df = pd.DataFrame({'Names':['John'] * 2 + ['Peter'] * 2 + ['Sam'] * 2,
'Cars':['Ferrari, Toyota','Ferrari','Ferrari, Toyota','Ferrari',
'Ferrari, Toyota','Ferrari, Toyota'],
'Ferrari': [1,1,0,0,1,1],
'Toyota': [0,1,1,0,1,0]})

df['Evaluation1'] = df.iloc[:, 2:].ne(1).dot(df.columns[2:] + ', ').str.rstrip(', ')
print (df)
Names Cars Ferrari Toyota Evaluation1
0 John Ferrari, Toyota 1 0 Toyota
1 John Ferrari 1 1
2 Peter Ferrari, Toyota 0 1 Ferrari
3 Peter Ferrari 0 0 Ferrari, Toyota
4 Sam Ferrari, Toyota 1 1
5 Sam Ferrari, Toyota 1 0 Toyota

详细信息:

首先通过 iloc 选择所有没有前 2 的列并创建 bool 掩码 - 通过 ne 进行比较(!=):

print (df.iloc[:, 2:].ne(1))
Ferrari Toyota
0 False True
1 False False
2 True False
3 True True
4 False False
5 False True

然后用矩阵乘法dot带分隔符的列名:

print (df.iloc[:, 2:].ne(1).dot(df.columns[2:] + ', '))
0 Toyota,
1
2 Ferrari,
3 Ferrari, Toyota,
4
5 Toyota,
dtype: object

并通过 rstrip 删除最后一个分隔符:

print (df.iloc[:, 2:].ne(1).dot(df.columns[2:] + ', ').str.rstrip(', '))
0 Toyota
1
2 Ferrari
3 Ferrari, Toyota
4
5 Toyota
dtype: object

如果不可能按位置选择,因为应该更改没有 0,1 的列的位置,则可以使用 drop用于删除不必要的列:

df1 = df.drop(['Names','Ferrari'], axis=1).ne(1)
df['Evaluation2'] = df1.dot(df1.columns + ', ').str.rstrip(', ')

关于python - 基于以逗号分隔的列和其他两列的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53271542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com