考虑这个简化的DF:

import pandas as pd
data = { 'Name_Type': ["Primary", "Primary", "AKA", "Primary"],
         'Name': ["John", "Daniel", "Dan", "Bob"],
         'Surname': ["Green", "Brown", "Brown", "White"],
         'Country Type': ["Origin", "Origin", None, "Origin"],
         'Country': ["UK", "UK", None, "UK"],
         'Other': ["Info", None, None, "Info"]}
df = pd.DataFrame(data)
  Name_Type    Name Surname Country Type Country Other
0   Primary    John   Green       Origin      UK  Info
1   Primary  Daniel   Brown       Origin      UK  None
2       AKA     Dan   Brown         None    None  None
3   Primary     Bob   White       Origin      UK  Info

因此,我想在具有Origin而不是无的每一行下添加新值.如果已经生成的行下有"无"(如示例中的第2行),我想将值"公民身份"添加到"国家类型"列中,并将值"英国"添加到该行的"国家"中.如果没有行,我想在当前行下创建一个新行并添加相同的值.所以最终的输出将是这样的:

  Name_Type    Name Surname Country Type Country Other
0   Primary    John   Green       Origin      UK  Info
1      None    None    None  Citizenship      UK  None
2   Primary  Daniel   Brown       Origin      UK  None
3       AKA  Daniel   Brown  Citizenship      UK  None
4   Primary     Bob   White       Origin      UK  Info
5      None    None    None  Citizenship      UK  None

推荐答案

您可以使用布尔屏蔽来识别要复制的行,然后concat个不同的部分并使用sort_index恢复顺序:

# identify rows to duplicate
m = df['Country Type'].isna()
m2 = ~(m | m.shift(-1))

# values to fill
fill = {'Country Type': 'Citizenship',
        'Country': 'UK'}

# concatenation
out = pd.concat([df[m2],
                 df.loc[m2, ['Country']]
                   .assign(**fill),
                 df[~m2].fillna(fill)
                ]).sort_index(kind='stable')

输出:

  Name_Type    Name Surname Country Type Country Other
0   Primary    John   Green       Origin      UK  Info
0       NaN     NaN     NaN  Citizenship      UK   NaN
1   Primary  Daniel   Brown       Origin      UK  None
2       AKA     Dan   Brown  Citizenship      UK  None
3   Primary     Bob   White       Origin      UK  Info
3       NaN     NaN     NaN  Citizenship      UK   NaN

Python相关问答推荐

将numpy矩阵映射到字符串矩阵

如何销毁框架并使其在tkinter中看起来像以前的样子?

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

Polars:使用列值引用when / then表达中的其他列

Python中MongoDB的BSON时间戳

计算相同形状的两个张量的SSE损失

Pythind 11无法弄清楚如何访问tuple元素

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

driver. find_element无法通过class_name找到元素'""

移动条情节旁边的半小提琴情节在海运

如何在Pyplot表中舍入值

如何防止Pandas将索引标为周期?

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

如何在Great Table中处理inf和nans

将一个双框爆炸到另一个双框的范围内

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

pandas:在操作pandora之后将pandora列转换为int

为罕见情况下的回退None值键入

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?