PythonValueError:传递值的形状是(1627),索引暗示(3627)

PythonValueError:传递值的形状是(1627),索引暗示(3627),python,pandas,Python,Pandas,我正在尝试运行以下代码: import pandas as pd import numpy as np df = pd.read_csv('example.csv', sep=';', engine='python') df1 =df.sort_values(['topic', 'student', 'level'], ascending=True) count_list = df1.apply(lambda x: [df.ix[x.name-1].student if x.name &g

我正在尝试运行以下代码:

import pandas as pd
import numpy as np


df = pd.read_csv('example.csv', sep=';', engine='python')
df1 =df.sort_values(['topic', 'student', 'level'], ascending=True)

count_list = df1.apply(lambda x: [df.ix[x.name-1].student if x.name >0 else np.nan, x.student, x.level>1], axis=1).values

#line giving the error
df1_count = pd.DataFrame(columns=['st_source','st_dest','reply_count'], data=count_list)
但我经常收到这样的错误信息:

ValueError: Shape of passed values is (1, 627), indices imply (3, 627)
有人知道我怎么修吗

谢谢大家!

count_list = df1.apply(lambda x: (df.ix[x.name-1].student,np.nan,np.nan) if x.name 0 else (np.nan, x.student, x.level>1), axis=1).values
df2 = pd.DataFrame(count_list)
df2[['st_source','st_dest','reply_count']] = df2[0].apply(pd.Series)
df2 = df2.drop(0, 1)
这将返回如下数据帧:

   >>> df2
   st_source   st_dest reply_count
0  -0.689652       NaN         NaN
1   0.696232       NaN         NaN
2   0.767232       NaN         NaN
3        NaN  0.696232       False
4   1.024604       NaN         NaN
5   1.121045       NaN         NaN

也许有更好、更有效的方法,但这解决了问题。请注意,我让您的
if
语句返回一个长度为3的元组,不管它处于何种状态。

哪一行给出了这个错误?@juanpa.arrivillaga df1_count=pd.DataFrame(列=['st_source','st_dest','reply_count',data=count\u list)我认为这里的问题是,您修改了数据框,使新列不再具有与原始数据框相同的元素数。@ViníciusAguiar可能。。有没有办法解决这个问题?嗯,你到底想用lambda函数做什么?谢谢@葡萄酒