簡體   English   中英

如何根據 Pandas 中的條件將一列的值復制到另一列?

[英]How to copy values of one column to another based on condition in Pandas?

我的代碼如下所示,將門票發送到第一列中的電子郵件。 因此,如果有 7 張票和 2 封電子郵件,程序將遍歷電子郵件並發送所有票。 我的問題是當所有電子郵件都發送完畢后,如何將 email ID 分配給所有者列。

示例:我確定所有門票都將發送到“1”列中的 email ID,如何將“1”中的 email ID 分配給“所有者”列中的所有 7 行。

我在文件“combo.csv”中有以下輸入

0            1                 2                 3     owner
0   0   sunith@email.com    116675  Random Message 1    NaN
1   1   sunith@email.com    116674  Random Message 2    NaN
2   2   NaN                 116675  Random Message 3    NaN
3   3   NaN                 116676  Random Message 4    NaN
4   4   NaN                 116677  Random Message 5    NaN
5   5   NaN                 116678  Random Message 6    NaN
6   6   NaN                 116679  Random Message 7    NaN

請幫忙

e = pd.read_csv('combo.csv')
f = e.fillna("")
print(f)
emails = f['1'].values
email_index = 0
count_of_emails = len(emails)
print("count of emails" + str(count_of_emails))
ticket_number = list(f['2'].values)
desc_value = f['3'].values
for ticket_index in range(len(ticket_number)):
    if not emails[email_index]:
        continue
    if email_index != count_of_emails:
        print("resetting email Index")
        email_index = 0
    outlook = win32com.client.Dispatch("Outlook.Application")
    if not ticket_number[ticket_index]:
        message = f'Random Message'
    else:
        message = f'Hello the ticket number {int(ticket_number[ticket_index])} with the Description {desc_value[ticket_index]} has been assigned to ' \
                  f'you. '
        adding_owner = pd.read_csv('combo.csv')
        adding_owner['owner'] = emails
        owner_added = adding_owner.copy()
        # del owner_added['4']
        owner_added = owner_added.loc[:, ~owner_added.columns.str.contains('^Unnamed')]
        owner_added.to_csv('combo.csv')

    mail = outlook.CreateItem(0)
    mail.To = emails[email_index]
    mail.Subject = 'This is a test'
    mail.HTMLBody = message
    mail.Send()
    print("Sent email to" + emails[email_index])
    email_index = email_index + 1

如果所有電子郵件都已發送,那么 output 應該是這樣的

Output:

   0            1                  2                 3     owner
    0   0   sunith@email.com    116675  Random Message 1    sunith@email.com
    1   1   sunith@email.com    116674  Random Message 2    sunith@email.com
    2   2   NaN                 116675  Random Message 3    sunith@email.com
    3   3   NaN                 116676  Random Message 4    sunith@email.com
    4   4   NaN                 116677  Random Message 5    sunith@email.com
    5   5   NaN                 116678  Random Message 6    sunith@email.com
    6   6   NaN                 116679  Random Message 7    sunith@email.com

假設您的表被分解為 .csv 每個唯一的 email,最簡單的解決方案是:

In [57]: test.iloc[:, 0] = df.iloc[:, 3].ffill()

In [58]: df
Out[58]:
                  0       1               2                 3
0  sunith@email.com  116675               1  sunith@email.com
1  sunith@email.com  116674               2  sunith@email.com
2               NaN  116675               3  sunith@email.com
3               NaN  116676               4  sunith@email.com
4               NaN  116677               5  sunith@email.com
5               NaN  116678               6  sunith@email.com
6               NaN  116679               7  sunith@email.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM