簡體   English   中英

如何對照另一個列檢查pandas數據框列的值並在第三列中操作該值

[英]How can I check the value of a pandas dataframe column against another column and manipulate the value in a third column

我有一個熊貓數據框

dfcolour:

     A      B      C       D     E
0   red     0     redy     1    red
1   blue    1     bluey    2    bluey
2   green   0     greeny   0    greenz

我想檢查E列中的值,並將它們與A和C列進行比較。如果E中的值與同一行的A中的值匹配,那么我想增加B中的值,如果它與C中的值匹配同一行,然后我將增加D中的值,如果兩者都不匹配,我想創建2個新列F&G,其中F具有新字符串,而G作為整數列從0開始遞增

新的dfcolour如下所示:

     A      B      C       D     E       F        G
0   red     1     redy     1    red               0
1   blue    1     bluey    3    bluey             0
2   green   0     greeny   0    greenz   greenz   1

是否可以不重復進行此操作?

創建數據框的代碼:

dfObject = pd.DataFrame()
dfObject.set_value(1, 'A', 'red')
dfObject.set_value(1, 'B', 0)
dfObject.set_value(1, 'C', 'redy')
dfObject.set_value(1, 'D', 1)
dfObject.set_value(1, 'E', 'red')
dfObject.set_value(2, 'A', 'blue')
dfObject.set_value(2, 'B', 1)
dfObject.set_value(2, 'C', 'bluey')
dfObject.set_value(1, 'D', 2)
dfObject.set_value(1, 'E', 'bluey')
dfObject.set_value(3, 'A', 'green')
dfObject.set_value(3, 'B', 0)
dfObject.set_value(3, 'C', 'greeny')
dfObject.set_value(1, 'D', 0)
dfObject.set_value(1, 'E', 'greenz')

您可以創建這些條件並使用numpy.where構造新列:

AE = df.A == df.E
CE = df.C == df.E
df['B'] += AE          # if A == E, add one to B
df['D'] += CE          # if C == E, add one to D
df['F'] = pd.np.where(~(AE|CE), df.E, '')   # else create F
df['G'] = pd.np.where(~(AE|CE), 1, 0)       # else create G
​    
df
#      A    B        C  D        E       F  G
#0   red    1     redy  1      red          0
#1  blue    1    bluey  3    bluey          0
#2  green   0   greeny  0   greenz  greenz  1

很抱歉,我的第一個想法是進行某種迭代:您可以一個函數應用於DataFrame的行,並返回一個或多個列。 通常這就是我的方法。 它仍然在迭代,但是比使用iterrows “更好”。

def special_function(row):
    b = row['B']
    d = row['D']
    f = None
    g = 0
    if row['E'] == row['A']:
        b = b + 1
    elif row['E'] == row['C']:
        d = d + 1
    else:
        f = row['E']
        g = 1
    return pandas.Series({ 'B':b, 'D':d, 'F': f, 'G': g })

dfcolour[['B', 'D', 'F', 'G']] = dfcolour.apply(special_function, axis=1)

暫無
暫無

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

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