Python Pandas-在for循环迭代的末尾添加一行

Python Pandas-在for循环迭代的末尾添加一行,python,pandas,Python,Pandas,所以我有一个for循环,它获取一系列值并进行一些测试: list = [1, 2, 3, 4, 5, 6] df = pd.DataFrame(columns=['columnX','columnY', 'columnZ']) for value in list: if value > 3: df['columnX']="A" else: df['columnX']="B" df['columnZ']="Another value

所以我有一个for循环,它获取一系列值并进行一些测试:

list = [1, 2, 3, 4, 5, 6]
df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'])
for value in list:
    if value > 3:
       df['columnX']="A"
    else:
       df['columnX']="B"
       df['columnZ']="Another value only to be filled in this condition"
    df['columnY']=value-1
我怎样才能做到这一点,并且无论if的结果如何,都将每个循环迭代的所有值保持在一行中?我可以保留一些列为空吗

我的意思是类似于以下过程:

[create empty row] -> [process] -> [fill column X] -> [process] -> [fill column Y if true] ...
比如:


我不确定是否完全理解,但我认为这可能是一个解决方案:

list = [1, 2, 3, 4, 5, 6]
d = {'columnX':[],'columnY':[]}
for value in list:
    if value > 3:
       d['columnX'].append("A")
    else:
       d['columnX'].append("B")
    d['columnY'].append(value-1)
df = pd.DataFrame(d)
对于第二个问题,只需添加另一个条件

list = [1, 2, 3, 4, 5, 6]
d = {'columnX':[],'columnY':[], 'columnZ':[]}
for value in list:
    if value > 3:
       d['columnX'].append("A")
    else:
       d['columnX'].append("B")
    if condition:
        d['columnZ'].append(xxx)
    else:
        d['columnZ'].append(None)
df = pd.DataFrame(d)

根据您给出的示例,我稍微更改了您的代码,以实现您共享的结果:

list = [1, 2, 3, 4, 5, 6]
df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'])
for index, value in enumerate(list):
    temp = []
    if value > 3:
       #df['columnX']="A"
       temp.append("A")
       temp.append(None)
    else:
       #df['columnX']="B"
       temp.append("B")
       temp.append("Another value") # or you can add any conditions
    #df['columnY']=value-1
    temp.append(value-1)
    df.loc[index] = temp

print(df)
这将产生以下结果:

  columnX        columnY  columnZ
0       B  Another value      0.0
1       B  Another value      1.0
2       B  Another value      2.0
3       A           None      3.0
4       A           None      4.0
5       A           None      5.0

df.index打印为:Int64Index([0,1,2,3,4,5],dtype='int64')

您可以根据输入列表大小使用索引准备/初始化数据帧,然后从
np获取电源。其中
例程:

In [111]: lst = [1, 2, 3, 4, 5, 6]
     ...: df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'], index=range(len(lst)))

In [112]: int_arr = np.array(lst)

In [113]: df['columnX'] = np.where(int_arr > 3, 'A', 'B')

In [114]: df['columnZ'] = np.where(int_arr > 3, df['columnZ'], '...')

In [115]: df['columnY'] = int_arr - 1

In [116]: df
Out[116]: 
  columnX  columnY columnZ
0       B        0     ...
1       B        1     ...
2       B        2     ...
3       A        3     NaN
4       A        4     NaN
5       A        5     NaN

对于每个循环迭代,将所有值保留在一行中-您的意思是什么?这里已经回答:@Asif I'm get:keyrerror:“标签[0]不在[index]”中,当尝试按照您提到的问题的方式“附加”新行时。我想要的更像是:创建emtpy行并根据一系列过程填充行。请检查我的编辑,我添加了另一个与“保留空列”相关的问题。因此我被迫填充所有列,即使是我没有值的列?我这样问是因为在最初的解决方案中,我有很多列,其中很多列都是空的
In [111]: lst = [1, 2, 3, 4, 5, 6]
     ...: df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'], index=range(len(lst)))

In [112]: int_arr = np.array(lst)

In [113]: df['columnX'] = np.where(int_arr > 3, 'A', 'B')

In [114]: df['columnZ'] = np.where(int_arr > 3, df['columnZ'], '...')

In [115]: df['columnY'] = int_arr - 1

In [116]: df
Out[116]: 
  columnX  columnY columnZ
0       B        0     ...
1       B        1     ...
2       B        2     ...
3       A        3     NaN
4       A        4     NaN
5       A        5     NaN