簡體   English   中英

減去熊貓中數據框之間的行

[英]Subtracting rows between data frames in pandas

我有兩個數據框

df1
Name   | std
kumar  | 8
Ravi   | 10
Sri    | 2
Ram    | 4


df2,
Name   | std
Sri    | 2
Ram    | 4

我想從df1中減去df2行,我嘗試過,

df1.subtract(df2,fill_value=None)

但我出錯了

 TypeError: unsupported operand type(s) for -: 'str' and 'str' 

我想要的輸出,

df3
Name   | std
kumar  | 8
Ravi   | 10

使用pd.Series.isin

df1[~df1.Name.isin(df2.Name)]

    Name  std
0  kumar    8
1   Ravi   10

您與參數indicator和外部聯接進行使用mergequery過濾,然后使用drop刪除幫助器列:

DataFrames在所有列上都是聯接的,因此on參數可以省略。

df1 = pd.DataFrame({'Name':['kumar','Ravi','Sri','Ram'],
                    'std':[8,10,2,4],
                    'col':list('abcd')})
print (df1)
    Name col  std
0  kumar   a    8
1   Ravi   b   10
2    Sri   c    2
3    Ram   d    4

df2 = pd.DataFrame({'Name':['Sri','Ram'],
                    'std':[2,4],
                    'col':list('cd')})
print (df2)
  Name col  std
0  Sri   c    2
1  Ram   d    4

df3 = pd.merge(df1, df2, how='outer', indicator=True)
        .query('_merge=="left_only"')
        .drop('_merge',1)
print (df3)
    Name col  std
0  kumar   a    8
1   Ravi   b   10

您“數字”不是數字而是字符串。 首先讓它們編號。 如果只有一些數字列,請在轉換前選擇它們:

numeric = ["c1", "c2", "c3", ...] # All numeric columns
df1.set_index('Name')[numeric].astype(int) \
- df2.set_index('Name')[numeric].astype(int)

暫無
暫無

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

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