我希望将两列特性组合成一列,其中每一行将表示一个数据点作为一个元组。
例如,下面是我的数据框架:
Weather Temp Play
0 2 1 0
1 2 1 0
2 0 1 1
3 1 2 1
4 1 0 1
5 1 0 0我想让它看起来像这样:
x Play
0 (2,1) 0
1 (2,1) 0
2 (0,1) 1
3 (1,2) 1
4 (1,0) 1
5 (1,0) 0然后,我想将它用于伯努利朴素贝叶斯的model.fit(dfx,dfPlay)。
这有可能吗?我尽量避免使用列表。下一次我如何为n列这样做呢?
发布于 2022-05-04 02:17:58
您可以使用zip
df['x'] = list(zip(df.Weather, df.Temp))
Weather Temp Play x
0 1 1 4 (1, 1)
1 2 1 5 (2, 1)
2 3 1 6 (3, 1)发布于 2022-05-04 01:13:02
df.apply()可用于各种异常情况,如以下情况:
df['x'] = df.apply(lambda x: (x.Weather, x.Temp), axis=1)输出:
Weather Temp Play x
0 2 1 0 (2, 1)
1 2 1 0 (2, 1)
2 0 1 1 (0, 1)
3 1 2 1 (1, 2)
4 1 0 1 (1, 0)
5 1 0 0 (1, 0)发布于 2022-05-04 02:56:48
为了补充@SruthiV的答案,如果您想获得所示的格式(您可以用一个新的替换2列),您可以删除这些列,同时将它们与pop一起使用
df['x'] = list(zip(df.pop('Weather'), df.pop('Temp')))输出:
Play x
0 0 (2, 1)
1 0 (2, 1)
2 1 (0, 1)
3 1 (1, 2)
4 1 (1, 0)
5 0 (1, 0)类似地,如果您想在(第一个)上一个列的位置上insert新列:
df.insert(df.columns.get_loc('Weather'), 'x',
list(zip(df.pop('Weather'), df.pop('Temp'))))注意:这一行动已经到位
输出:
x Play
0 (2, 1) 0
1 (2, 1) 0
2 (0, 1) 1
3 (1, 2) 1
4 (1, 0) 1
5 (1, 0) 0https://stackoverflow.com/questions/72106937
复制相似问题