Python 如果列值存在,则创建新行
我有一个熊猫数据框,看起来像这样: 我想遍历第3列,如果存在元素,则向dataframe添加一个新行,使用第3列中的值作为第2列中的新值,同时也使用第0列和第1列中的数据作为新添加行中第0列和第1列的值: 这里,第2行是新添加的行。此行第0列和第1列中的值来自找到“D”的行,现在新行的第2列包含第一行“D”第3列中的值 这里有一种方法,但肯定有一个更通用的解决方案,特别是如果我希望扫描多个列:Python 如果列值存在,则创建新行,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样: 我想遍历第3列,如果存在元素,则向dataframe添加一个新行,使用第3列中的值作为第2列中的新值,同时也使用第0列和第1列中的数据作为新添加行中第0列和第1列的值: 这里,第2行是新添加的行。此行第0列和第1列中的值来自找到“D”的行,现在新行的第2列包含第一行“D”第3列中的值 这里有一种方法,但肯定有一个更通用的解决方案,特别是如果我希望扫描多个列: a = pd.DataFrame([['A','B','C','D'],[1,2,'C']]) b
a = pd.DataFrame([['A','B','C','D'],[1,2,'C']])
b = a.copy()
for tu in a.itertuples(index=False): # Iterate by row
if tu[3]: # If exists
b = b.append([[tu[0],tu[1],tu[3]]], ignore_index=True) # Append with new row using correct tuple elements.
这可能更一般(假设您的列是整数,并且您总是希望填充此模式中的前几列)
通过创建一个包含所需列的新df并将其附加到原始df,您可以在不使用任何循环的情况下完成此操作
import pandas as pd
import numpy as np
df = pd.DataFrame([['A','B','C','D'],[1,2,'C']])
ndf = df[pd.notnull(df[3])][[0,1,3]]
ndf.columns = [0,1,2]
df = df.append(ndf, ignore_index=True)
这将为新缺少的值留下NaN,您可以更改这些值,然后更改为None
df[3] = df[3].where((pd.notnull(df[3])), None)
印刷品
0 1 2 3
0 A B C D
1 1 2 C None
2 A B D None
因为我的真实df使用字符串作为列名,所以在使用
append
时,我遇到了列重新排序的问题。为了解决这个问题,我将原始列名记录为df\u cols
,然后在附加的数据帧上使用df=df.reindex\u axis(df\u cols,axis=1)
。
0 1 2 3
0 A B C D
1 1 2 C None
2 A B D None