Добавить значение из столбца на основе другого столбца через цикл - PullRequest
0 голосов
/ 27 января 2020

У меня есть следующий фрейм данных:

ViewKey     Table_Name
car         A
car         B
NaN         C
ball        D
ball        E

и следующие предложения:

contains_car = " SELECT \n keys \n FROM *letter here*  \n LEFT JOIN "
contains_ball = " SELECT \n keys \n FROM *letter here*  \n RIGHT JOIN "
contains_NaN = " SELECT \n keys \n FROM *letter here*  \n ALL"

Я хочу "print" со следующей идеей:

Если мой raw содержит car print contains_car значение, но вместо *letter here* напишите соответствующее значение столбца Table_name:

# as it related to "car" value in the column it printed contains_car value. 
# And at the same time instead of *letter here* wrote A because for the first car value A is corresponding:


SELECT  
 keys 
 FROM A
 LEFT JOIN


 SELECT 
 keys 
 FROM B 
 LEFT JOIN

 SELECT 
 keys 
 FROM C
 ALL

 SELECT 
 keys 
 FROM D 
 RIGHT JOIN

 SELECT 
 keys 
 FROM E 
 RIGHT JOIN

Я попытался:

for i in df['ViewKey'].fillna("0"):
    if 'car' in i:
        print(contains_car)
    elif 'ball' in i:
        print(contains_ball)
    elif '0' in i:
        print(contains_NaN)

IDK где ставить если условия

Ответы [ 3 ]

0 голосов
/ 27 января 2020
for index, rows in df.iterrows():
   print("SELECT \n keys \n FROM {} \n {} \n".format(row['Table_Name'], row['ViewKey']))

Выше приведен код, который просто напечатает ваше требование. Если вы хотите сделать это через l oop, как вы указали в задаче, то проблема, которая возникнет, заключается в том, что df['Table_Name'][df['ViewKey'] == 'car'] выведет как 'A', так и 'B', в то время как для печати требуется только 1 , Для этого потребуется 5 различных if, что абсолютно не нужно.

0 голосов
/ 27 января 2020

Я думаю, что это должно работать для вас:

df = df.fillna("0")
for index, row in df.iterrows():
    if "car" in row['ViewKey']:
        print(contains_car.replace("*letter here*", row['Table_Name']))
    if "ball" in row['ViewKey']:
        print(contains_ball.replace("*letter here*", row['Table_Name']))
    if "0" in row['ViewKey']:
        print(contains_NaN.replace("*letter here*", row['Table_Name']))
0 голосов
/ 27 января 2020

Если я правильно понимаю ваш вопрос, то вы можете получить вывод без if-операторов. Если имя вашего фрейма данных df:

for index, row in df.iterrows():
    print("SELECT \n keys \n FROM {0} \n {1}\n".format(row['Table_Name'], row['ViewKey']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...