So sánh hai DataFrames và xuất ra sự khác biệt của chúng cạnh nhau


162

Tôi đang cố gắng làm nổi bật chính xác những gì đã thay đổi giữa hai datafram.

Giả sử tôi có hai datafram Python Pandas:

"StudentRoster Jan-1":
id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.11                     False                Graduated
113  Zoe    4.12                     True       

"StudentRoster Jan-2":
id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.21                     False                Graduated
113  Zoe    4.12                     False                On vacation

Mục tiêu của tôi là xuất ra một bảng HTML:

  1. Xác định các hàng đã thay đổi (có thể là int, float, boolean, chuỗi)
  2. Xuất ra các hàng có cùng giá trị OLD và MỚI (lý tưởng vào bảng HTML) để người tiêu dùng có thể thấy rõ những gì đã thay đổi giữa hai dataframes:

    "StudentRoster Difference Jan-1 - Jan-2":  
    id   Name   score                    isEnrolled           Comment
    112  Nick   was 1.11| now 1.21       False                Graduated
    113  Zoe    4.12                     was True | now False was "" | now   "On   vacation"

Tôi cho rằng tôi có thể thực hiện một hàng theo hàng và cột bằng cách so sánh cột, nhưng có cách nào dễ hơn không?


Từ gấu trúc 1.1, bạn có thể dễ dàng thực hiện điều này với một lệnh gọi hàm duy nhất -df.compare .
cs95

Câu trả lời:


153

Phần đầu tiên tương tự như Constantine, bạn có thể nhận được boolean trong đó các hàng trống *:

In [21]: ne = (df1 != df2).any(1)

In [22]: ne
Out[22]:
0    False
1     True
2     True
dtype: bool

Sau đó, chúng ta có thể thấy những mục đã thay đổi:

In [23]: ne_stacked = (df1 != df2).stack()

In [24]: changed = ne_stacked[ne_stacked]

In [25]: changed.index.names = ['id', 'col']

In [26]: changed
Out[26]:
id  col
1   score         True
2   isEnrolled    True
    Comment       True
dtype: bool

Ở đây mục đầu tiên là chỉ mục và cột thứ hai đã được thay đổi.

In [27]: difference_locations = np.where(df1 != df2)

In [28]: changed_from = df1.values[difference_locations]

In [29]: changed_to = df2.values[difference_locations]

In [30]: pd.DataFrame({'from': changed_from, 'to': changed_to}, index=changed.index)
Out[30]:
               from           to
id col
1  score       1.11         1.21
2  isEnrolled  True        False
   Comment     None  On vacation

* Lưu ý: điều quan trọng là df1df2chia sẻ cùng một chỉ mục ở đây. Để khắc phục sự mơ hồ này, bạn có thể đảm bảo bạn chỉ nhìn vào các nhãn được chia sẻ bằng cách sử dụng df1.index & df2.index, nhưng tôi nghĩ rằng tôi sẽ để nó như một bài tập.


2
Tôi tin rằng "chia sẻ cùng một chỉ mục" có nghĩa là "đảm bảo rằng chỉ mục đó được sắp xếp" ... điều này sẽ so sánh bất cứ điều gì đầu tiên df1với bất cứ điều gì đầu tiên df2, bất kể giá trị của chỉ mục. JFYI trong trường hợp tôi không phải là người duy nhất không rõ ràng. ; D Cảm ơn!
dmn

12
Nếu điểm bằng với nancả df1 và df1, hàm này sẽ báo cáo là đã thay đổi từ nanthành nan. Điều này là do np.nan != np.nanlợi nhuận True.
James Owers

2
@kungfujam nói đúng. Ngoài ra, nếu các giá trị được so sánh là Không có, bạn cũng sẽ nhận được sự khác biệt sai ở đó
FistOfFury 8/12/2016

Nói rõ hơn - Tôi minh họa vấn đề với giải pháp này và cung cấp một chức năng dễ sử dụng để khắc phục sự cố bên dưới
James Owers

1
['Hàng', 'col'] thích hợp hơn ['id', 'col'] như đã thay đổi.index.names, vì đó không phải là id, mà là hàng.
naoki fujita

87

Làm nổi bật sự khác biệt giữa hai DataFrames

Có thể sử dụng thuộc tính kiểu DataFrame để làm nổi bật màu nền của các ô nơi có sự khác biệt.

Sử dụng dữ liệu mẫu từ câu hỏi ban đầu

Bước đầu tiên là nối các DataFrames theo chiều ngang với concathàm và phân biệt từng khung với keystham số:

df_all = pd.concat([df.set_index('id'), df2.set_index('id')], 
                   axis='columns', keys=['First', 'Second'])
df_all

nhập mô tả hình ảnh ở đây

Có thể dễ dàng hơn để trao đổi các cấp cột và đặt các tên cột giống nhau cạnh nhau:

df_final = df_all.swaplevel(axis='columns')[df.columns[1:]]
df_final

nhập mô tả hình ảnh ở đây

Bây giờ, dễ dàng hơn nhiều để phát hiện sự khác biệt trong các khung. Nhưng, chúng ta có thể đi xa hơn và sử dụng thuộc styletính để làm nổi bật các ô khác nhau. Chúng tôi xác định một chức năng tùy chỉnh để làm điều này mà bạn có thể thấy trong phần này của tài liệu .

def highlight_diff(data, color='yellow'):
    attr = 'background-color: {}'.format(color)
    other = data.xs('First', axis='columns', level=-1)
    return pd.DataFrame(np.where(data.ne(other, level=0), attr, ''),
                        index=data.index, columns=data.columns)

df_final.style.apply(highlight_diff, axis=None)

nhập mô tả hình ảnh ở đây

Điều này sẽ làm nổi bật các ô mà cả hai đều thiếu giá trị. Bạn có thể điền chúng hoặc cung cấp thêm logic để chúng không được tô sáng.


1
Bạn có biết làm thế nào để có thể tô màu cả 'Thứ nhất' và 'Thứ hai' trong các màu khác nhau không?
aturegano

1
Có thể chỉ chọn các hàng khác nhau? Trong trường hợp này, làm cách nào để chọn hàng thứ hai và thứ ba mà không chọn hàng đầu tiên (111)?
shantanuo

1
@shantanuo, vâng, chỉ cần chỉnh sửa phương thức cuối cùng thànhdf_final[(df != df2).any(1)].style.apply(highlight_diff, axis=None)
anmol

3
Việc triển khai này mất nhiều thời gian hơn khi so sánh các tệp dữ liệu với 26K hàng và 400 cột. Có cách nào để tăng tốc nó không?
mật mã

42

Câu trả lời này chỉ đơn giản là mở rộng @Andy Hayden, làm cho nó trở nên linh hoạt khi các trường số nanvà gói nó thành một hàm.

import pandas as pd
import numpy as np


def diff_pd(df1, df2):
    """Identify differences between two pandas DataFrames"""
    assert (df1.columns == df2.columns).all(), \
        "DataFrame column names are different"
    if any(df1.dtypes != df2.dtypes):
        "Data Types are different, trying to convert"
        df2 = df2.astype(df1.dtypes)
    if df1.equals(df2):
        return None
    else:
        # need to account for np.nan != np.nan returning True
        diff_mask = (df1 != df2) & ~(df1.isnull() & df2.isnull())
        ne_stacked = diff_mask.stack()
        changed = ne_stacked[ne_stacked]
        changed.index.names = ['id', 'col']
        difference_locations = np.where(diff_mask)
        changed_from = df1.values[difference_locations]
        changed_to = df2.values[difference_locations]
        return pd.DataFrame({'from': changed_from, 'to': changed_to},
                            index=changed.index)

Vì vậy, với dữ liệu của bạn (được chỉnh sửa một chút để có NaN trong cột điểm):

import sys
if sys.version_info[0] < 3:
    from StringIO import StringIO
else:
    from io import StringIO

DF1 = StringIO("""id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 "He was late to class"
112  Nick   1.11                     False                "Graduated"
113  Zoe    NaN                     True                  " "
""")
DF2 = StringIO("""id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 "He was late to class"
112  Nick   1.21                     False                "Graduated"
113  Zoe    NaN                     False                "On vacation" """)
df1 = pd.read_table(DF1, sep='\s+', index_col='id')
df2 = pd.read_table(DF2, sep='\s+', index_col='id')
diff_pd(df1, df2)

Đầu ra:

                from           to
id  col                          
112 score       1.11         1.21
113 isEnrolled  True        False
    Comment           On vacation

Tôi đã thêm mã để xử lý các khác biệt nhỏ trong kiểu dữ liệu, điều này sẽ gây ra lỗi, nếu bạn không tính đến nó.
Roobie Nuby 30/03/18

Nếu tôi không có hàng giống hệt nhau ở hai bên để so sánh thì sao?
Kishor kumar R

@KishorkumarR sau đó bạn thậm chí nên ra các hàng trước, bằng cách phát hiện các hàng đã thêm vào khung dữ liệu mới và xóa các hàng khỏi khung dữ liệu cũ
Sabre

22
import pandas as pd
import io

texts = ['''\
id   Name   score                    isEnrolled                        Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.11                     False                           Graduated
113  Zoe    4.12                     True       ''',

         '''\
id   Name   score                    isEnrolled                        Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.21                     False                           Graduated
113  Zoe    4.12                     False                         On vacation''']


df1 = pd.read_fwf(io.StringIO(texts[0]), widths=[5,7,25,21,20])
df2 = pd.read_fwf(io.StringIO(texts[1]), widths=[5,7,25,21,20])
df = pd.concat([df1,df2]) 

print(df)
#     id  Name  score isEnrolled               Comment
# 0  111  Jack   2.17       True  He was late to class
# 1  112  Nick   1.11      False             Graduated
# 2  113   Zoe   4.12       True                   NaN
# 0  111  Jack   2.17       True  He was late to class
# 1  112  Nick   1.21      False             Graduated
# 2  113   Zoe   4.12      False           On vacation

df.set_index(['id', 'Name'], inplace=True)
print(df)
#           score isEnrolled               Comment
# id  Name                                        
# 111 Jack   2.17       True  He was late to class
# 112 Nick   1.11      False             Graduated
# 113 Zoe    4.12       True                   NaN
# 111 Jack   2.17       True  He was late to class
# 112 Nick   1.21      False             Graduated
# 113 Zoe    4.12      False           On vacation

def report_diff(x):
    return x[0] if x[0] == x[1] else '{} | {}'.format(*x)

changes = df.groupby(level=['id', 'Name']).agg(report_diff)
print(changes)

in

                score    isEnrolled               Comment
id  Name                                                 
111 Jack         2.17          True  He was late to class
112 Nick  1.11 | 1.21         False             Graduated
113 Zoe          4.12  True | False     nan | On vacation

3
Giải pháp rất hay, gọn hơn nhiều mà tôi!
Andy Hayden

1
@AndyHayden: Tôi không hoàn toàn thoải mái với giải pháp này; nó dường như chỉ hoạt động khi chỉ mục là một chỉ số đa cấp. Nếu tôi cố gắng chỉ sử dụng idlàm chỉ mục, sau đó df.groupby(level='id')sẽ phát sinh lỗi và tôi không chắc tại sao ...
unutbu

19

Tôi đã phải đối mặt với vấn đề này, nhưng đã tìm thấy câu trả lời trước khi tìm thấy bài đăng này:

Dựa trên câu trả lời của unutbu, tải dữ liệu của bạn ...

import pandas as pd
import io

texts = ['''\
id   Name   score                    isEnrolled                       Date
111  Jack                            True              2013-05-01 12:00:00
112  Nick   1.11                     False             2013-05-12 15:05:23
     Zoe    4.12                     True                                  ''',

         '''\
id   Name   score                    isEnrolled                       Date
111  Jack   2.17                     True              2013-05-01 12:00:00
112  Nick   1.21                     False                                
     Zoe    4.12                     False             2013-05-01 12:00:00''']


df1 = pd.read_fwf(io.StringIO(texts[0]), widths=[5,7,25,17,20], parse_dates=[4])
df2 = pd.read_fwf(io.StringIO(texts[1]), widths=[5,7,25,17,20], parse_dates=[4])

... xác định hàm diff của bạn ...

def report_diff(x):
    return x[0] if x[0] == x[1] else '{} | {}'.format(*x)

Sau đó, bạn có thể chỉ cần sử dụng một Bảng điều khiển để kết luận:

my_panel = pd.Panel(dict(df1=df1,df2=df2))
print my_panel.apply(report_diff, axis=0)

#          id  Name        score    isEnrolled                       Date
#0        111  Jack   nan | 2.17          True        2013-05-01 12:00:00
#1        112  Nick  1.11 | 1.21         False  2013-05-12 15:05:23 | NaT
#2  nan | nan   Zoe         4.12  True | False  NaT | 2013-05-01 12:00:00

Nhân tiện, nếu bạn đang ở trong IPython Notebook, bạn có thể muốn sử dụng hàm diff màu để cung cấp màu tùy thuộc vào các ô khác nhau, bằng hoặc trái / phải null:

from IPython.display import HTML
pd.options.display.max_colwidth = 500  # You need this, otherwise pandas
#                          will limit your HTML strings to 50 characters

def report_diff(x):
    if x[0]==x[1]:
        return unicode(x[0].__str__())
    elif pd.isnull(x[0]) and pd.isnull(x[1]):
        return u'<table style="background-color:#00ff00;font-weight:bold;">'+\
            '<tr><td>%s</td></tr><tr><td>%s</td></tr></table>' % ('nan', 'nan')
    elif pd.isnull(x[0]) and ~pd.isnull(x[1]):
        return u'<table style="background-color:#ffff00;font-weight:bold;">'+\
            '<tr><td>%s</td></tr><tr><td>%s</td></tr></table>' % ('nan', x[1])
    elif ~pd.isnull(x[0]) and pd.isnull(x[1]):
        return u'<table style="background-color:#0000ff;font-weight:bold;">'+\
            '<tr><td>%s</td></tr><tr><td>%s</td></tr></table>' % (x[0],'nan')
    else:
        return u'<table style="background-color:#ff0000;font-weight:bold;">'+\
            '<tr><td>%s</td></tr><tr><td>%s</td></tr></table>' % (x[0], x[1])

HTML(my_panel.apply(report_diff, axis=0).to_html(escape=False))

(Trong Python thông thường, không phải máy tính xách tay iPython) có thể bao gồm my_panel = pd.Panel(dict(df1=df1,df2=df2))bên trong chức năng report_diff()không? Ý tôi là, có thể làm điều này không: print report_diff(df1,df2)và có được đầu ra giống như câu lệnh in của bạn không?
edesz

pd.Panel(dict(df1=df1,df2=df2)).apply(report_diff, axis=0)- điều này thật tuyệt!!!
MaxU

5
Các bảng bị phản đối! Bất kỳ ý tưởng làm thế nào để cổng này?
denfromufa

@denfromufa Tôi đã có một động thái cập nhật nó trong câu trả lời của mình: stackoverflow.com/a/49038417/7607701
Aaron N. Brock

9

Nếu hai datafram của bạn có cùng id trong đó, thì việc tìm hiểu những gì đã thay đổi thực sự khá dễ dàng. Chỉ cần làm frame1 != frame2sẽ cung cấp cho bạn một DataFrame boolean trong đó mỗi Truedữ liệu đã thay đổi. Từ đó, bạn có thể dễ dàng lấy chỉ mục của từng hàng thay đổi bằng cách thực hiện changedids = frame1.index[np.any(frame1 != frame2,axis=1)].


6

Một cách tiếp cận khác nhau bằng cách sử dụng concat và drop_d repeatates:

import sys
if sys.version_info[0] < 3:
    from StringIO import StringIO
else:
    from io import StringIO
import pandas as pd

DF1 = StringIO("""id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 "He was late to class"
112  Nick   1.11                     False                "Graduated"
113  Zoe    NaN                     True                  " "
""")
DF2 = StringIO("""id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 "He was late to class"
112  Nick   1.21                     False                "Graduated"
113  Zoe    NaN                     False                "On vacation" """)

df1 = pd.read_table(DF1, sep='\s+', index_col='id')
df2 = pd.read_table(DF2, sep='\s+', index_col='id')
#%%
dictionary = {1:df1,2:df2}
df=pd.concat(dictionary)
df.drop_duplicates(keep=False)

Đầu ra:

       Name  score isEnrolled      Comment
  id                                      
1 112  Nick   1.11      False    Graduated
  113   Zoe    NaN       True             
2 112  Nick   1.21      False    Graduated
  113   Zoe    NaN      False  On vacation

3

Sau khi loay hoay với câu trả lời của @ journois, tôi đã có thể khiến nó hoạt động bằng cách sử dụng Multi Index thay vì Bảng điều khiển do sự mô tả của Bảng điều khiển .

Đầu tiên, tạo một số dữ liệu giả:

df1 = pd.DataFrame({
    'id': ['111', '222', '333', '444', '555'],
    'let': ['a', 'b', 'c', 'd', 'e'],
    'num': ['1', '2', '3', '4', '5']
})
df2 = pd.DataFrame({
    'id': ['111', '222', '333', '444', '666'],
    'let': ['a', 'b', 'c', 'D', 'f'],
    'num': ['1', '2', 'Three', '4', '6'],
})

Sau đó, xác định hàm diff của bạn , trong trường hợp này tôi sẽ sử dụng hàm từ câu trả lời của anh ta report_diffgiữ nguyên:

def report_diff(x):
    return x[0] if x[0] == x[1] else '{} | {}'.format(*x)

Sau đó, tôi sẽ ghép dữ liệu vào khung dữ liệu Multi Index:

df_all = pd.concat(
    [df1.set_index('id'), df2.set_index('id')], 
    axis='columns', 
    keys=['df1', 'df2'],
    join='outer'
)
df_all = df_all.swaplevel(axis='columns')[df1.columns[1:]]

Và cuối cùng tôi sẽ áp dụng report_diffxuống từng nhóm cột:

df_final.groupby(level=0, axis=1).apply(lambda frame: frame.apply(report_diff, axis=1))

Kết quả này:

         let        num
111        a          1
222        b          2
333        c  3 | Three
444    d | D          4
555  e | nan    5 | nan
666  nan | f    nan | 6

Và đó là tất cả!


3

Mở rộng câu trả lời của @cge, điều này khá tuyệt để dễ đọc hơn về kết quả:

a[a != b][np.any(a != b, axis=1)].join(pd.DataFrame('a<->b', index=a.index, columns=['a<=>b'])).join(
        b[a != b][np.any(a != b, axis=1)]
        ,rsuffix='_b', how='outer'
).fillna('')

Ví dụ minh họa đầy đủ:

import numpy as np, pandas as pd

a = pd.DataFrame(np.random.randn(7,3), columns=list('ABC'))
b = a.copy()
b.iloc[0,2] = np.nan
b.iloc[1,0] = 7
b.iloc[3,1] = 77
b.iloc[4,2] = 777

a[a != b][np.any(a != b, axis=1)].join(pd.DataFrame('a<->b', index=a.index, columns=['a<=>b'])).join(
        b[a != b][np.any(a != b, axis=1)]
        ,rsuffix='_b', how='outer'
).fillna('')

1

Đây là một cách khác bằng cách sử dụng chọn và hợp nhất:

In [6]: # first lets create some dummy dataframes with some column(s) different
   ...: df1 = pd.DataFrame({'a': range(-5,0), 'b': range(10,15), 'c': range(20,25)})
   ...: df2 = pd.DataFrame({'a': range(-5,0), 'b': range(10,15), 'c': [20] + list(range(101,105))})


In [7]: df1
Out[7]:
   a   b   c
0 -5  10  20
1 -4  11  21
2 -3  12  22
3 -2  13  23
4 -1  14  24


In [8]: df2
Out[8]:
   a   b    c
0 -5  10   20
1 -4  11  101
2 -3  12  102
3 -2  13  103
4 -1  14  104


In [10]: # make condition over the columns you want to comapre
    ...: condition = df1['c'] != df2['c']
    ...:
    ...: # select rows from each dataframe where the condition holds
    ...: diff1 = df1[condition]
    ...: diff2 = df2[condition]


In [11]: # merge the selected rows (dataframes) with some suffixes (optional)
    ...: diff1.merge(diff2, on=['a','b'], suffixes=('_before', '_after'))
Out[11]:
   a   b  c_before  c_after
0 -4  11        21      101
1 -3  12        22      102
2 -2  13        23      103
3 -1  14        24      104

Đây là điều tương tự từ ảnh chụp màn hình của Jupyter:

nhập mô tả hình ảnh ở đây


0

gấu trúc> = 1.1: DataFrame.compare

Với gấu trúc 1.1, về cơ bản bạn có thể sao chép đầu ra của Ted Petrou bằng một lệnh gọi chức năng duy nhất. Ví dụ lấy từ các tài liệu:

pd.__version__
# '1.1.0.dev0+2004.g8d10bfb6f'

df1.compare(df2)

  score       isEnrolled       Comment             
   self other       self other    self        other
1  1.11  1.21        NaN   NaN     NaN          NaN
2   NaN   NaN        1.0   0.0     NaN  On vacation

Ở đây, "bản thân" đề cập đến Khung dữ liệu LHS, trong khi "khác" là Khung dữ liệu RHS. Theo mặc định, các giá trị bằng nhau được thay thế bằng NaN để bạn có thể tập trung vào chỉ các khác biệt. Nếu bạn muốn hiển thị các giá trị bằng nhau, hãy sử dụng

df1.compare(df2, keep_equal=True, keep_shape=True) 

  score       isEnrolled           Comment             
   self other       self  other       self        other
1  1.11  1.21      False  False  Graduated    Graduated
2  4.12  4.12       True  False        NaN  On vacation

Bạn cũng có thể thay đổi trục so sánh bằng cách sử dụng align_axis:

df1.compare(df2, align_axis='index')

         score  isEnrolled      Comment
1 self    1.11         NaN          NaN
  other   1.21         NaN          NaN
2 self     NaN         1.0          NaN
  other    NaN         0.0  On vacation

Điều này so sánh các giá trị theo hàng, thay vì theo cột.


Lưu ý: gấu trúc 1.1 vẫn đang thử nghiệm và chỉ khả dụng khi xây dựng hộp cát phát triển .
cs95

-1

Một hàm tìm thấy sự khác biệt không đối xứng giữa hai khung dữ liệu được triển khai bên dưới: (Dựa trên chênh lệch đã đặt cho gấu trúc ) GIST: https://gist.github.com/oneryalcin/68cf25f536a25e65f0b3c84f9c118e03

def diff_df(df1, df2, how="left"):
    """
      Find Difference of rows for given two dataframes
      this function is not symmetric, means
            diff(x, y) != diff(y, x)
      however
            diff(x, y, how='left') == diff(y, x, how='right')

      Ref: /programming/18180763/set-difference-for-pandas/40209800#40209800
    """
    if (df1.columns != df2.columns).any():
        raise ValueError("Two dataframe columns must match")

    if df1.equals(df2):
        return None
    elif how == 'right':
        return pd.concat([df2, df1, df1]).drop_duplicates(keep=False)
    elif how == 'left':
        return pd.concat([df1, df2, df2]).drop_duplicates(keep=False)
    else:
        raise ValueError('how parameter supports only "left" or "right keywords"')

Thí dụ:

df1 = pd.DataFrame(d1)
Out[1]: 
                Comment  Name  isEnrolled  score
0  He was late to class  Jack        True   2.17
1             Graduated  Nick       False   1.11
2                         Zoe        True   4.12


df2 = pd.DataFrame(d2)

Out[2]: 
                Comment  Name  isEnrolled  score
0  He was late to class  Jack        True   2.17
1           On vacation   Zoe        True   4.12

diff_df(df1, df2)
Out[3]: 
     Comment  Name  isEnrolled  score
1  Graduated  Nick       False   1.11
2              Zoe        True   4.12

diff_df(df2, df1)
Out[4]: 
       Comment Name  isEnrolled  score
1  On vacation  Zoe        True   4.12

# This gives the same result as above
diff_df(df1, df2, how='right')
Out[22]: 
       Comment Name  isEnrolled  score
1  On vacation  Zoe        True   4.12

-1

nhập gấu trúc như pd nhập numpy như np

df = pd.read_excel ('D: \ HARISH \ DATA KHOA HỌC \ 1 MY Đào tạo \ SAMPLE DATA & projs \ CRICKET DATA \ IPL PLAYER DANH SÁCH \ IPL PLAYER DANH SÁCH _ harish.xlsx')

df1 = srh = df [df ['TEAM']. str.contains ("SRH")] df2 = csk = df [df ['TEAM']. str.contains ("CSK")]

srh = srh.iloc [:, 0: 2] csk = csk.iloc [:, 0: 2]

csk = csk.reset_index (drop = True) csk

srh = srh.reset_index (drop = Đúng) srh

mới = pd.concat ([srh, csk], trục = 1)

new.head ()

** LOẠI CHƠI TRÒ CHƠI

0 David Warner Batsman ... Đội trưởng MS Dhoni

1 Bhuvaneshwar Kumar Bowler ... Ravindra Jadeja toàn diện

2 Manish Pandey Batsman ... Suresh Raina toàn diện

3 Rashid Khan Arman Bowler ... Kedar Jadhav Toàn diện

4 Batsman Shikhar Dhawan .... Dwayne Bravo All-Rounder


PLAYER LOẠI PLAYER LOẠI 0 David Warner batsman MS Dhoni Captain 1 Bhuvaneshwar Kumar Bowler Ravindra Jadeja All-Rounder 2 Manish Pandey batsman Suresh Raina All-Rounder 3 Rashid Khan Arman Bowler Kedar Jadhav All-Rounder 4 Shikhar Dhawan batsman Dwayne Bravo All-Rounder
Harish TRASH

Xin chào Harish, vui lòng định dạng câu trả lời của bạn nhiều hơn một chút, nếu không thì khá khó đọc :)
Markus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.