Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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中循环通过成对列表合并数据帧的行_Python_List_Dataframe_For Loop_Concatenation - Fatal编程技术网

在python中循环通过成对列表合并数据帧的行

在python中循环通过成对列表合并数据帧的行,python,list,dataframe,for-loop,concatenation,Python,List,Dataframe,For Loop,Concatenation,我有一个数据框,其中所有的单元格都是字符串。我想循环一个成对的列表并连接数据帧的行 例如,我有一个如下所示的数据框: df=[['7','4','5','',''],["","","",'7','4'],['9','4','7','8','4'],["","","",'7','5'],['4','8','5','4','6'],['4','9','41','74','20'],['4','Super','yes','0','9']] df=pd.DataFrame(df) df.astype('

我有一个数据框,其中所有的单元格都是字符串。我想循环一个成对的列表并连接数据帧的行

例如,我有一个如下所示的数据框:

df=[['7','4','5','',''],["","","",'7','4'],['9','4','7','8','4'],["","","",'7','5'],['4','8','5','4','6'],['4','9','41','74','20'],['4','Super','yes','0','9']]
df=pd.DataFrame(df)
df.astype('str')
print(df)
0   1   2   3   4   
7   4   5           
            7   4
9   4   7   8   4
            7   5
4   8   5   4   6
4   9   41  74  20
我想在下面的成对列表中循环,其中第一个元素是开始和第二个结束

list_index=[[1,3],[4,5]]
这是对我的审判。我试图将列表更改为range,以便访问每个pared元素并循环它们,但没有成功抛出
TypeError:“list”对象不能解释为整数

for row,index in df.iterrows():
    for i in range(len(list_index)):
        for j in range(list_index[i]):
            df[row,:] = df[row,:] + row 
最后,对于以上索引的开始和结束,我希望数据最终数据帧如下所示:

0   1   2   3   4   
7   4   5           
9   4   7   787 445
44  89  541 474 620

我不知道如何在python中循环遍历列表的成对元素。有人能帮我吗?

这里有一个没有
groupby的解决方案

# this is an important step because we need a column to groupby
df['gb'] = 'gb'

start_end = [[1,3],[4,5]]

new_df = pd.DataFrame()

for l in start_end:

    temp_df = df.iloc[l[0] : l[1] + 1,:].groupby(['gb']).agg(lambda x : ''.join(x)).reset_index(drop = True)

    new_df = pd.concat([new_df, temp_df], ignore_index = True)

new_df
start_end = [[1,3],[4,5]]

new_df = pd.DataFrame()

for l in start_end:

    temp_df = df.iloc[l[0] : l[1] + 1,:].apply(lambda x : ''.join(x)).to_frame().transpose()

    new_df = pd.concat([new_df, temp_df], ignore_index = True)

new_df

嗨,我不明白你的输出。因此,您希望从第1行第3列
[1,3]
开始到第4行第5列
[4,5]
发生什么?第2行原始df的空单元格在哪里<代码>[2,0:3]
我认为您想要的输出中存在缺陷。特别是,我认为应该是9,4,7787445。如果我错了,请纠正我。@Börn B,谢谢你的回答。不,这些列根本不受影响。我想连接从1到3和4到5的数据帧行。这些列根本不受影响,我想为所有列连接介于1和3之间的行以及介于4和5之间的行。@Ramin Melikov感谢您的发现。我现在已经编辑好了,对此我感激不尽。我一整天都在想这个问题。这太棒了,如果你能解释一下lambda函数是如何在这里工作的,我也能用同样的逻辑来处理动态的列数,那就太棒了?例如,如果下次列数是3或6,该怎么办?我刚刚更新了代码。我拿走了一些东西。现在,它可以对任意数量的列执行此操作。那是深夜,我不知道我在想什么,硬编码所有的专栏。lambda函数连接每列的所有分组单元格。如果您与Oracle合作过,它就像Listag,而在SQLite中则是group_concat。我感谢您在这方面的帮助。我现在正试图找到另一种方法来解决这个问题。如果可能的话,你能用for循环帮我解决这个问题吗。我试图学习如何使用for循环在python中实现类似的功能。提前谢谢你的帮助。那里有一个for循环。你没看到吗?这太完美了。非常感谢你。我现在明白了它的工作原理