Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 7

0
votes
answers
25 views
+10

重新設置僅在熊貓系列日期時間指數

1

我有熊貓系列棗myS重新設置僅在熊貓系列日期時間指數

import pandas as pd 

該指數是一組包含時間字符串的唯一

myS.index 

Out[28]: 
Index([u'12:00 AM', u'12:14 AM', u'12:18 AM', u'12:25 AM', u'12:26 AM', 
     u'12:37 AM', u'12:41 AM', u'12:47 AM', u'12:55 AM', u'12:59 AM', 
     ... 
     u'11:00 PM', u'11:02 PM', u'11:09 PM', u'11:18 PM', u'11:25 PM', 
     u'11:35 PM', u'11:42 PM', u'11:46 PM', u'11:50 PM', u'11:55 PM'], 
     dtype='object', name=u'Time (CET)', length=169) 

我可以方便地將它轉換爲日期時間正確:

myS.index= pd.to_datetime(myS.index, format='%I:%M %p') 

但是,所有的日期將被設置爲1900-01-01

'1900-01-01 23:50:00', '1900-01-01 23:55:00'], 
       dtype='datetime64[ns]', 

如果我有日期時間可用,我怎麼能索引的所有日期復位到期望值而保留的時間?

沙发
0
1

我想你需要添加Date列,然後轉換爲datetime

myS.index = pd.to_datetime(myS['Date'].astype(str) + ' ' + myS.index) 

或者添加標量:

myS.index = pd.to_datetime('2015-01-05' + ' ' + myS.index) 

通過編輯點評:

myS.index = pd.to_datetime(str(mydatetime.date()) + ' ' + myS.index, 
          format='%Y-%m-%d %I:%M %p',errors='coerce') 

或者使用strftime

myS.index = pd.to_datetime(mydatetime.strftime('%Y-%m-%d') + ' ' + 
          myS.index, format='%Y-%m-%d %I:%M %p',errors='coerce') 

樣品:

idx = pd.Index([u'12:00 AM', u'12:14 AM', u'12:18 AM', u'12:25 AM']) 
myS = pd.Series(range(4), index=idx) 
print (myS) 
12:00 AM 0 
12:14 AM 1 
12:18 AM 2 
12:25 AM 3 
dtype: int64 

mydatetime = pd.datetime.now() 
print (mydatetime) 
2017-12-18 07:52:26.503385 

myS.index = pd.to_datetime(str(mydatetime.date()) + ' ' + 
          myS.index, format='%Y-%m-%d %I:%M %p',errors='coerce') 

print (myS) 
2017-12-18 00:00:00 0 
2017-12-18 00:14:00 1 
2017-12-18 00:18:00 2 
2017-12-18 00:25:00 3 
dtype: int64 
+0

此解決方案是正確的。但是,如果我的日期時間是單個值而不是現有的數據框列,那麼ast(str)將不起作用(AttributeError:'datetime.datetime'對象沒有屬性'astype'),而str(mydatetime.date())會執行 – ErroriSalvo

+0

感謝您的評論,我添加它來回答。 – jezrael

+0

哎呀,我失去了你的評論,對不起:( – jezrael

板凳
0
1
  1. 將所有時間字符串加上所需的日期字符串。
  2. 使用pd.to_datetime,並附加日期格式字符串。

例如,如果您有2017-03-05 12:18 AM,則您的格式字符串將變爲%Y-%m-%d %I:%M %p

myS.index = pd.to_datetime('2017-03-05 ' + myS.index, '%Y-%m-%d %I:%M %p') 

(原來的默認格式非常適用於這種情況,所以format='%Y-%m-%d %I:%M %p'是可選的。)

+0

感謝,這是正確的。但是,我並不真的贊成自動格式識別,因爲您總是會在某處找到10-2-2017,如果您未設置顯式轉換規則,結果可能與數據有關 – ErroriSalvo

0
votes
answers
27 views
+10

如何從Python中的字符串中提取字符?

1

我需要使一些名稱格式匹配稍後在我的腳本中進行合併。我列「名稱」是從CSV導入幷包含類似名稱如下:如何從Python中的字符串中提取字符?

安東尼布朗

萊西恩·麥考伊

萊夫翁·貝爾

對於我的劇本,我想獲得第一個名字的第一個字母,並與姓氏結合起來這樣....

A.Brown

L.McCoy

L.Bell

這裏是我已經把現在返回一個烤餅每次:

ff['AbbrName'] = ff['Name'].str.extract('([A-Z]s[a-zA-Z]+)', expand=True)

謝謝!

+0

你不能使用apply()來執行將它分成兩個單詞的函數,並且從第一個單詞加上第二個單詞得到第一個字符。 – furas

+0

'.split('')'? –

+0

如果您的問題得到解答,請[投票,並接受最有幫助的](https://meta.stackexchange.com/a/5235)。謝謝。 –

沙发
0
7

另一種選擇使用str.replace方法與^([A-Z]).*?([a-zA-Z]+)$; ^([A-Z])捕獲字符串開頭的第一個字母; ([a-zA-Z]+)$最後一個字相匹配,然後由第一捕獲組和第二組捕獲之間加入.重建名稱:

df['Name'].str.replace(r'^([A-Z]).*?([a-zA-Z]+)$', r'1.2') 
#0 A.Brown 
#1 L.McCoy 
#2  L.Bell 
#Name: Name, dtype: object 
+1

這裏正則表達式真的有必要嗎? –

+0

@COLDSPEED我傾向於認爲正則表達式在此處有效,因爲OP處理名稱,在真實數據集中出現意外格式並不奇怪。 'Regex'有助於驗證名稱。 – Psidom

板凳
0
4

如果你只想apply()將由第一空間分割,並獲得第一個字加入剩下的第一個字符的功能:

import pandas as pd 


def abbreviate(row): 
    first_word, rest = row['Name'].split(" ", 1) 
    return first_word[0] + ". " + rest 


df = pd.DataFrame({'Name': ['Antonio Brown', 'LeSean McCoy', "Le'Veon Bell"]}) 
df['AbbrName'] = df.apply(abbreviate, axis=1) 
print(df) 

打印:

  Name AbbrName 
0 Antonio Brown A. Brown 
1 LeSean McCoy L. McCoy 
2 Le'Veon Bell L. Bell 
+0

有時在名稱列中可能只有名字? – Dark

+0

@Dark是的,我想我們需要知道在OP的特定情況下名稱的可能值是什麼,但好處是,我們可以創建一些輸入來打破解決方案。謝謝。 – alecxe

地板
0
0

你得到烤餅,因爲你的正則表達式無法比擬的名字。

相反,我會嘗試以下方法:

parts = ff[name].split(' ') 
ff['AbbrName'] = parts[0][0] + '.' + parts[1] 
+0

這不起作用? –

4楼
0
2

這應該是很簡單的事,即使沒有正則表達式。使用字符串拆分和串聯的組合。

df.Name.str[0] + '.' + df.Name.str.split().str[-1] 

0 A.Brown 
1 L.McCoy 
2  L.Bell 
Name: Name, dtype: object 

如果在Name列具有前導空格的可能性,與df.Name.str.strip().str[0]更換df.Name.str[0]

警告:列最少必須有兩個名字。

0
votes
answers
30 views
+10

子集熊貓數據框達到條件時第一次

1

我沒有什麼運氣來完成一項任務,我想要一個熊貓數據框的子集高達一個值,並按他們的ID分組。在實際的數據集,我有幾個列在 '身份證' 和 '狀態'子集熊貓數據框達到條件時第一次

之間。例如:

d = {'id': [1,1,1,1,1,1,1,2,2,2,2,2,2,2], 'status': [0,0,0,0,1,1,1,0,0,0,0,1,0,1]} 
df = pd.DataFrame(data=d) 

    id status 
0 1  0 
1 1  0 
2 1  0 
3 1  0 
4 1  1 
5 1  1 
6 1  1 
7 2  0 
8 2  0 
9 2  0 
10 2  0 
11 2  1 
12 2  0 
13 2  1 

所需的子集是:

id status 
0 1  0 
1 1  0 
2 1  0 
3 1  0 
4 1  1 
5 2  0 
6 2  0 
7 2  0 
8 2  0 
9 2  1 
沙发
0
2

讓我們嘗試groupby + cumsum

df = df.groupby('id', group_keys=False) 
     .apply(lambda x: x[x.status.cumsum().cumsum().le(1)]) 
     .reset_index(drop=1) 
df 

    id status 
0 1  0 
1 1  0 
2 1  0 
3 1  0 
4 1  1 
5 2  0 
6 2  0 
7 2  0 
8 2  0 
9 2  1 

下面是執行groupby創建蒙用作索引器替代:

df = df[df.status.eq(1).groupby(df.id) 
      .apply(lambda x: x.cumsum().cumsum().le(1))] 
      .reset_index(drop=1) 
df 

    id status 
0 1  0 
1 1  0 
2 1  0 
3 1  0 
4 1  1 
5 2  0 
6 2  0 
7 2  0 
8 2  0 
9 2  1 
+0

謝謝@COLDSPEED。你能解釋兩次使用.cumsum()。cumsum()嗎?我看到輸出的差異,但不完全理解它。 –

+0

@DarenEiri我不得不在你的MCVE上表揚你,因爲我意識到這是必要的。說'status'是'0 0 0 1 0 1'。我需要前4行,對嗎?第一個'cumsum'給出'0 0 0 1 1 2'。基於'> = 1'(或'le(1)')條件,它會給我前5行,而我想要4。第二個'cumsum'給我'0 0 0 1 2 4',現在'le(1)'只給出我想要的前4行。 –

+0

@COLDSPEED。謝謝你的解釋。我在無數次失敗的嘗試中使用了'cumsum'方法,但是使用'le(1)'的第二個'cumsum'則有所不同! –

0
votes
answers
13 views
+10

使用熊貓計算累計結果的頻率

0

廣泛地說,我有來自Kaggle的智能量表數據集,我試圖按房子計算第一個和最後一個量度,然後嘗試聚合以查看有多少房屋開始(或結束)報告給定的一天。我接受的方法完全不同於我在下面追求的路線。使用熊貓計算累計結果的頻率

在SQL中,探索數據時,我經常使用類似以下內容:

SELECT Max_DT, COUNT(House_ID) AS HouseCount 
FROM 
(
    SELECT House_ID, MAX(Date_Time) AS Max_DT 
    FROM ElectricGrid GROUP BY HouseID 
) MeasureMax 
GROUP BY Max_DT 

我想在熊貓複製這種邏輯和失敗。我可以得到初始聚集,如:

house_max = house_info.groupby('House_Id').agg({'Date_Time' :['max']}) 

但是我沒有得到外部查詢。具體來說,我不知道聚合列被稱爲什麼。如果我做了一個describe(),它在上面的例子中顯示爲Date_Time。我試圖重新命名列:

house_max.columns = ['House_Id','Max_Date_Time'] 

我發現了一個StackOverflow discussion有關重命名聚集的結果,並試圖將其應用:

house_max.columns = ["_".join(x) for x in house_max.columns.ravel()] 

我還發現,在說明()返回DATE_TIME作爲列名。

start_end_collate = house_max.groupby('Date_Time_max')['House_Id'].size() 

在重命名示例中,我的第二個查詢無法找到Date_Time或Max_Date_Time。在後面的例子中,Ravel代碼在運行時似乎沒有找到House_Id。

沙发
0
1

這似乎很奇怪,我想你的代碼將無法找到House_Id字段。在House_Id上執行groupby之後,它將成爲您不能作爲列引用的索引。

這應該工作:

house_max = house_info.groupby('House_Id').agg({'Date_Time' :['max']}) 
house_max.columns = ["_".join(x) for x in house_max.columns.ravel()] 
start_end_collate = house_max.groupby('Date_Time_max').size() 

或者你可以刪除多列:

house_max.columns = house_max.columns.droplevel(0) 
start_end_collate = house_max.groupby('max').size() 
+0

你一語中的。謝謝。 我一直在盯着這個很長一段時間,所以我甚至沒有嘗試回去並理解我的錯誤,但我會再次看看再次感謝。 –

0
votes
answers
24 views
+10

用虛擬變量爲數值創建固定大小的數據幀

0

我必須爲可能有16個值(0-15)的列創建虛擬變量,但是當我基於它創建虛擬變量時,不需要全部16個值:用虛擬變量爲數值創建固定大小的數據幀

my_column 
0 3 
1 4 
2 7 
3 1 
4 9 

我希望我的虛擬變量有16列,或者更多 - 任何預先固定由我一個值,並在列名稱中的數字對應於my_column價值,但如果my_column只有,比方說,從16個可能值中的5個值,方法pd.get_dummies將只創建5列(如通過此方法預期),如下所示:

my_column 1 3 4 7 9 
0 3  0 1 0 0 0 
1 4  0 0 1 0 0 
2 7  0 0 0 1 0 
3 1  1 0 0 0 0 
4 9  0 0 0 0 1 

我該如何達到下列結果之一?

my_column 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
    0 3  0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
    1 4  0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
    2 7  0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
    3 1  0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    4 9  0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
沙发
0
3

使用get_dummies + reindex上的列 -

v = pd.get_dummies(df.my_column).reindex(columns=range(0, 16), fill_value=0) 

根據該文檔,reindex將 -

順應數據幀到具有可選的填充邏輯新的索引,將 NA/NaN在先前指數中沒有價值的地區。

fill_value=0將用零填充所有缺失的列。

您可以insertconcat添加原始列到結果 -

v.insert(0, 'my_column', df.my_column) 

v = pd.concat([df, v], 1) # alternative to insert 

v 

    my_column 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
0   3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
1   4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
2   7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
3   1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
4   9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
+0

請你也解釋REINDEX在你前面回答? – Siddharth

+1

@Siddharth添加了文檔摘錄,這有幫助嗎? –

+0

@COLDSPEED謝謝 – Siddharth

0
votes
answers
23 views
+10

熊貓:在單獨的列中顯示嵌套的字典中的值

2

我的字典是這樣的熊貓:在單獨的列中顯示嵌套的字典中的值

[ 
    { 
    "detail": { 
    "name": "boo", 
    "id": 1 
    }, 
    "other": { 
     "gender": "m", 
     "no": "234" 
    } 
    }, 
    { 
    "detail": { 
     "name": "hoo", 
     "id": 2 
    }, 
    "other": { 
     "gender": "f", 
     "no": "456" 
    } 
    } 
] 

名單,我想在一個Excel文件的格式如下

detail   other 
name id gender no 
boo 1  m  234 
hoo 2  f  456 

打印此數據總之,我想顯示父鍵列下的列中的嵌套值。我如何使用熊貓來實現這個目標?

或者是我們可以達到這個目標的任何其他圖書館,因爲熊貓是安靜的。

沙发
0
1

使用pd.io.json.json_normalize -

df = pd.io.json.json_normalize(data) 

這導致列名看起來像這樣 -

df.columns 
Index(['detail.id', 'detail.name', 'other.gender', 'other.no'], dtype='object') 

我們需要將此轉換爲MultiIndex,使用df.columns.str.split -

i = list(map(tuple, df.columns.str.split('.'))) 

致電pd.MultiIndex.from_tuples並指定結果背 -

df.columns = pd.MultiIndex.from_tuples(i) 
df 

    detail  other  
     id name gender no 
0  1 boo  m 234 
1  2 hoo  f 456 

如果你的數據比較複雜,你可能想使列上額外的sort_index呼叫 -

df = df.sort_index(axis=1) 
+1

Niceee ...謝謝你這麼多。 –

0
votes
answers
15 views
+10

Pandas multi index Dataframe - 選擇並刪除

1

我需要一些幫助清理具有多索引的Dataframe。Pandas multi index Dataframe - 選擇並刪除

它看起來是這樣的

    cost 
location season 
Thorp park autumn £12 
      srping £13 
      summer £22 
Sea life centre summer £34 
       spring £43 
Alton towers  and so on............. 

地點和季節是索引列。我想查看所有數據,並刪除所有三季都沒有「季節」價值的地點。所以應該刪除「海洋生物中心」。

任何人都可以幫助我嗎?

還有一個問題,我的數據框是從groupby命令創建的,並沒有「成本」列的列名。這是正常的嗎?列中有值,只是沒有標題。

沙发
0
3

選項1
groupby + count。您可以使用結果來索引您的數據框。

df 

    col 
a 1 0 
    2 1 
b 1 3 
    2 4 
    3 5 
c 2 7 
    3 8 

v = df.groupby(level=0).transform('count').values 
df = df[v == 3] 

df 

    col 
b 1 3 
    2 4 
    3 5 

選項2
groupbyfilter +。這是Paul H's idea,如果他想發佈,將會刪除。

df.groupby(level=0).filter(lambda g: g.count() == 3) 

    col 
b 1 3 
    2 4 
    3 5 
+0

會'df.groupby(級別= 0).filter(拉姆達G:!g.count()= 3)'有同樣的效果? –

+1

@PaulH添加了一個示例 - 您的方法有效。 –

+0

謝謝保羅,有沒有辦法改變你的建議。這給出的值不是3的值。我想從我的數據框中刪除這些值。我試過這個df.groupby(level = 0).filter(lambda g:g.count()= 3),但這不起作用 – SANM2009

板凳
0
2

選項1
條條框框思考...

df.drop(df.count(level=0).col[lambda x: x < 3].index) 

    col 
b 1 3 
    2 4 
    3 5 

同樣的事情多了幾分穩健性,因爲我不依賴於在列值我。

df.drop(df.index.to_series().count(level=0).loc[lambda x: x < 3].index) 

    col 
b 1 3 
    2 4 
    3 5 

選項2
Robustify爲隨季節的未定數目一般情況。
這使用熊貓版本0.21的groupby.pipe方法

df.groupby(level=0).pipe(lambda g: g.filter(lambda d: len(d) == g.size().max())) 

    col 
b 1 3 
    2 4 
    3 5 
+1

謝謝...... – SANM2009

+0

不客氣 – piRSquared

+0

什麼是傳遞給內部lambda? –

0
votes
answers
46 views
+10

守則PyCharm運行,但不Jupyter

1

我要打開一個Excel文件,我這樣做:守則PyCharm運行,但不Jupyter

xl_file = pd.ExcelFile('D:mypathmyFile.xls') 

在PyCharm(Python的2.7.8),它完美的作品,但Jupyter(Python的3),我總是這個錯誤:

FileNotFoundError: [Errno 2] No such file or directory 

可能是什麼原因?

沙发
0
1

如果您在除根目錄以外的地方調用jupyter筆記本,可能會發生這種情況。在這種情況下,jupyter可能無法訪問該文件。

嘗試去D:和調用jupyter筆記本,然後重試此操作。另一種選擇是使用筆記本的路徑:

os.path.abspath("__file__") 

然後設置數據集的相對路徑。

編輯:

比方說,你要設置包含筆記本上面的目錄路徑一級。然後,你會怎麼做:

foo = os.path.dirname(os.path.abspath("__file__")) 
relative_path = os.path.join(foo, '..') 
+0

我從Coursera網站打電話給Jupyter,所以我不認爲我可以對第一個選項做很多事情。如何設置相對路徑? – Joe

+0

啊。那麼jupyter在coursera服務器上運行嗎?這可能是你問題的根源。 – amanbirs

+0

我該如何解決這個問題? – Joe

板凳
0
0

之後已經改變爲在這個崗位how to change jupyter start folder?建議,如果文件是此文件夾中,加載它們它不是必要寫的路徑Jupyter啓動文件夾中。這已經足夠了:

xl_file = pd.ExcelFile('myFile.xls') 
0
votes
answers
22 views
+10

熊貓 - GROUPBY連續日期時間段

1

我有一個熊貓數據幀,看起來像這樣:熊貓 - GROUPBY連續日期時間段

KEY START  END   VALUE 
0 A  2017-01-01 2017-01-16 2.1 
1 B  2017-01-01 2017-01-23 4.3 
2 B  2017-01-23 2017-02-10 1.7 
3 A  2017-01-28 2017-02-02 4.2 
4 A  2017-02-02 2017-03-01 0.8 

我想groupbyKEYsumVALUE但僅限於時間連續句。因爲在該時間段的空隙

A
KEY START  END   VALUE 
0 A 2017-01-01 2017-01-16 2.1 
1 A 2017-01-28 2017-03-01 5.0 
2 B 2017-01-01 2017-02-10 6.0 

有二組:比如在上面的例子中,我想獲得。 我想避免循環,因爲數據幀有數千萬行。

沙发
0
1

創建由每組比較shiftSTART列,並用它來groupby幫手Series

s = df.loc[df.groupby('KEY')['START'].shift(-1) == df['END'], 'END'] 
s = s.combine_first(df['START']) 
print (s) 
0 2017-01-01 
1 2017-01-23 
2 2017-01-23 
3 2017-02-02 
4 2017-02-02 
Name: END, dtype: datetime64[ns] 

df = df.groupby(['KEY', s], as_index=False).agg({'START':'first','END':'last','VALUE':'sum'}) 
print (df) 
    KEY VALUE  START  END 
0 A 2.1 2017-01-01 2017-01-16 
1 A 5.0 2017-01-28 2017-03-01 
2 B 6.0 2017-01-01 2017-02-10 
+0

謝謝。但是,這一次只彙集兩行。任何想法如果我有與原始問題中描述的相同的數據框,再加上'START'= 2017-03-01和'2017-03-31'爲'END'的附加行,我可以如何修改您的解決方案?在這種情況下,從2017-01-28到2017-03-31有一個完全連續的時期,3行應該彙總在一起。 – Prikers

+0

不是那麼容易,我嘗試找到解決方案,但如果需要更快,您能創建新問題嗎? – jezrael

板凳
0
0

從jezrael答案就像一個魅力,如果有隻聚合兩個連續的行。在新示例中,它不會聚合KEY = A的最後三行。

 KEY START  END   VALUE 
0 A  2017-01-01 2017-01-16 2.1 
1 B  2017-01-01 2017-01-23 4.3 
2 B  2017-01-23 2017-02-10 1.7 
3 A  2017-01-28 2017-02-02 4.2 
4 A  2017-02-02 2017-03-01 0.8 
5 A  2017-03-01 2017-03-23 1.0 

以下解決方案(jezrael的解決方案稍作修改)使聚合應累計的所有行:

df = df.sort_values(by='START') 
idx = df.groupby('KEY')['START'].shift(-1) != df['END'] 
df['DATE'] = df.loc[idx, 'START'] 
df['DATE'] = df.groupby('KEY').DATE.fillna(method='backfill') 
df = (df.groupby(['KEY', 'DATE'], as_index=False) 
     .agg({'START': 'first', 'END': 'last', 'VALUE': 'sum'}) 
     .drop(['DATE'], axis=1)) 

其中給出:

KEY START   END  VALUE 
0 A 2017-01-01 2017-01-16 2.1 
1 A 2017-01-28 2017-03-23 6.0 
2 B 2017-01-01 2017-02-10 6.0 

感謝@jezrael爲優雅接近!

0
votes
answers
26 views
+10

根據jupyter筆記本中的條件梳理兩個大型數據框

0

我的第一個數據框有不同的列,其中一列包含Practice ID列,第二個數據框有不同的列,其中一列包含練習No所以我找到了他們倆。但是,如何使用練習編號將這些鏈接在一起,以便將數據框2中的郵政編碼信息分配給數據框1中的正確練習。根據jupyter筆記本中的條件梳理兩個大型數據框

任何幫助將不勝感激!!!

日期框1

ID Practice Items Cost 
0  5  10 2001.00 
1  12  2 20.98 
2  2  4 100.80 
3  7  7 199.60 

數據幀2

ID Prac No Dr  Postcode 
0  1  Dr.K  BT94 7HX 
1  5  Dr.H  BT7 4MC 
2  3  Dr.Love BT9 1HE 
3  7  Dr.Kerr BT72 4TX 

我想創建一個數據幀1的新列 '郵政編碼' 和郵政編碼分配到正確的實踐

ID Practice Items Cost Postcode  
0  5   10 BT7 4MC 
1  3   3 BT9 1HE 
2  22   8 BT62 4TU 
3  7   7 BT72 4TX 

我該怎麼做?

沙发
0
0

你可能想要一個merge +一點清理。

df = df1.merge(df2[['Prac No', 'Postcode']], 
     left_on='Practice', right_on='Prac No').drop('Prac No', 1) 

df # for this data 

    ID Practice Items Cost Postcode 
0 0   5  10 2001.0 BT7 4MC 
1 3   7  7 199.6 BT72 4TX 
+1

@COLDSPEED非常感謝你,這真的有幫助! – Harry