Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中获得前3个元素,每个有序行都有值_Python_Pandas - Fatal编程技术网

如何在Python中获得前3个元素,每个有序行都有值

如何在Python中获得前3个元素,每个有序行都有值,python,pandas,Python,Pandas,我有一个数据框,数据类型为字符串,如下所示: 身份证件 Var1 Var2 Var3 Var4 Var5 1. A. B C D E 2. B C D 3. C D E 4. A. C E 试试这个: 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

我有一个数据框,数据类型为字符串,如下所示:

身份证件 Var1 Var2 Var3 Var4 Var5 1. A. B C D E 2. B C D 3. C D E 4. A. C E 试试这个:

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]
  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]
  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的数据类型为string时,并且当她从每行中选取前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 

利用df.values.tolist()的替代解决方案

将熊猫作为pd导入
#使用空字符串的工作示例
df=pd.DataFrame({“Var1”:[“A”,“”,“”,,“A”],
“Var2”:[“B”、“B”、“0”、“0],
“Var3”:[“C”、“C”、“C”、“C”],
“Var4”:[“D”、“D”、“D”和“,”],
“Var5”:[“E”,“E”,“E”]
})
df[“Var6”]=df.values.tolist()
df[“Var6”]=df[“Var6”].map(lambda x:“,”.join([i为x中的i,如果i!=”“][:3]))
df
#无的工作示例
df=pd.DataFrame({“Var1”:[“A”,无,无,“A”],
“Var2”:[“B”,“B”,无,无],
“Var3”:[“C”、“C”、“C”、“C”],
“Var4”:[“D”,“D”,“D”,无],
“Var5”:[“E”,无,“E”,“E”]
})
df[“Var6”]=df.values.tolist()
df[“Var6”]=df[“Var6”].map(lambda x:“,”.join([i为x中的i,如果i不是None][:3]))
df

您可以将
堆栈
groupby.head(3)
和chain
groupby.agg(','.join)


尝试使用
stack
然后使用
groupby
head

df['out'] = df.stack().loc[lambda x : x!=''].groupby(level=0).head(3).groupby(level=0).agg(','.join)
Out[277]: 
0    A,B,C
1    B,C,D
2    C,D,E
3    A,C,E
dtype: object


@ShubhamSharma BeNY也打败了我-谢谢,这很有道理!