根据条件在现有列中添加新行

问题描述 投票:1回答:2

我有一个包含四列的数据框,分别是范围,天气,标志和计算。我需要从三个列表中获取三列(范围,天气和标志)的组合,并检查这些组合是否不存在三列,然后在数据框中添加新行。

range   weather  flag   calculation
 0-5    good      y      12
 5-6    good      n      14
 0-5    bad       n      2
 5-6    worse     y      5

输出如下:

range   weather  flag   calculation
 0-5    good      y       12
 0-5    bad       n        2
 0-5    good      n       null
 0-5    worse     n       null
 0-5    bad       y       null
 0-5    worse     y       null
 5-6    good      n       14
 5-6    worse     y        5
 5-6    bad       n       null
 5-6    worse     n       null
 5-6    bad       y       null
 5-6    good      y       null

我尝试过的代码如下:

r=['0-5','5-6']
w=['good','bad','worse']
f=['n','y']
for i in r:
    for j in w:
        for k in f:
            if i in data1['range'].values and j in data1['weather'].values and k in data1['flag'].values:
            print(i,j,k)
            print("yes")      
        else:
            print(i,j,k)
            print("no")
            data1=data1.append([{'bl_flag':j},{'weather_status':k}], ignore_index=True)
        print(data1)

上面的代码没有检查所有3种组合是否在一行中存在,如果它不在一行中,则必须将其附加在数据框中。

python-3.x pandas list dataframe append
2个回答
1
投票
r=['0-5','5-6']
w=['good','bad','worse']
f=['n','y']
for i in r:
    for j in f:
        for k in w:          
            count=data1[data1["range"]==i].groupby(["range","weather","flag"]).apply(lambda x: x[(x["flag"]==j)&(x["weather"]==k).any()])              
            if count.size==0:
                data1=data1.append({'flag':j,'weather':k}, ignore_index=True)

1
投票

解决此问题的一种方法是使用"range", "weather" and "flag"列中的所有可能值组合创建一个DataFrame,然后使用outer join将新DataFrame与原始DataFrame合并。

© www.soinside.com 2019 - 2024. All rights reserved.