我有一个数据类型为字符串的 DataFrame,如下所示:
ID
变量 1
变量2
变量3
变量 4
变量5
1
一种
乙
C
D
乙
2
乙
C
D
3
C
D
乙
4
一种
C
乙
我想为每一行选择前 3 个元素,如下所示:
ID
变量 1
变量2
变量3
变量 4
变量5
无功6
1
一种
乙
C
D
乙
甲、乙、丙
2
乙
C
D
乙、丙、丁
3
C
D
乙
C、D、E
4
一种
C
乙
高手
最佳答案
尝试这个:
df['Var6'] = df.apply(lambda x: [y for y in x.values if y != ''][:3], axis=1)
结果df: Var1 Var2 Var3 Var4 Var5 Var6
1 A B C D E [A, B, C]
2 B C D [B, C, D]
3 C D E [C, D, E]
4 A C E [A, C, E]
如果您希望结果为逗号分隔的字符串,请进一步使用:df['Var6'] = df['Var6'].str.join(', ')
结果df: Var1 Var2 Var3 Var4 Var5 Var6
1 A B C D E A, B, C
2 B C D B, C, D
3 C D E C, D, E
4 A C E A, C, E
如果您想一步完成,请使用:df['Var6'] = df.apply(lambda x: ','.join([y for y in x.values if y != ''][:3]), axis=1)
编辑我解释了
ID
当我提供答案时,在示例数据中作为行索引,特别是当 OP 提到 DataFrame 的数据类型为字符串时,当她从每行中选取前 3 个元素时,标记为 ID
的列中的值没有被选中。但是,我看到其他一些答案处理过
ID
作为数据列。为了完整起见,我想添加代码以防万一ID
是一个数据列,但仍然不会为每行的前 3 个元素选择其值。万一
ID
是一个数据列,但不被选取:稍微调整代码如下:df1 = df.set_index('ID') # temporarily set column ID as index
# same code as my main answer except to replace df by df1
df1['Var6'] = df1.apply(lambda x: ','.join([y for y in x.values if y != ''][:3]), axis=1)
df = df1.reset_index() # reset the index to move ID back to data column
关于python - 如何在Python中获取每个有序行的前3个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66625401/