python - 如何在Python中获取每个有序行的前3个元素

标签 python pandas

我有一个数据类型为字符串的 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/

相关文章:

python - 我的神经网络模型有什么问题?

python-3.x - 如何将 Pandas 数据帧写入 HDF5 数据集

python - Pandas 过滤、重命名和添加列的时间

python - 如果 Pandas 中两个单元格为空,则填充 .fillna 列

python - 在信号/槽中使用自定义对象(类似 PyQt_PyObject)

python - 如何在 Jupyter 笔记本上导入 openCV?

python pandas : How to simplify the result of groupby ('column_name' ). count()

python - 将 .csv 文件读取到 pandas 数据框并从换行符中识别数据部分

python - 如何将二叉树转换为级别字典

python - 如何从列表创建复选框