2014-10-30 17 views
0

假設我想創建一個csv文件,其中列1是索引,列2是一些類別列表,例如列1是我認識的人,以及第2列是類型:(親戚,朋友,專業熟人)使用pandas.read_csv爲csv捕獲熊貓中非互斥排序的類別

但在某些情況下,某人可能是一個專業熟人和朋友,或親戚朋友,甚至三個人。

有沒有一種方法可以將這些數據存儲在csv文件中,以便當我將它載入熊貓作爲數據框時,我可以通過相對,朋友或專業熟人對數據進行分組,從而允許雙倍或三倍數據,計算同一個人,後來計數和相關的東西?這是我的問題。我想知道如何處理這種情況。

例INPUT:

查理是專業熟人和朋友

託德是一個相對的和朋友

傑斯是專業熟人

湯姆是一個專業acquaintence

示例OUTPUT :(通過運行dfFromCSV.groupby('type').size()

專業acquaintences:3

朋友:2

相對:1

+0

你有一個詳盡的關係類型列表*先驗*? – 2014-10-30 21:45:48

回答

0

假設你的人際關係的名單是詳盡的,你可以蠻力這樣的:

import pandas 
from io import StringIO 

csvstring = StringIO("""\ 
relationship 
charlie is a professional acquaintance and friend 
todd is a relative and friend 
jess is a professional acquaintance 
tom is a professional acquaintance 
""") 

rtypes = [ 
    'professional acquaintance', 
    'friend', 
    'relative', 
    'rival', 
    'nemsis', 
    'mortal enemy' 
] 

df = pandas.read_csv(csvstring) 
for rt in rtypes: 
    df[rt] = df['relationship'].apply(lambda x: int(rt in x)) 

df.select_dtypes(exclude=[object]).sum() 

哪給我:

professional acquaintance 3 
friend      2 
relative      1 
rival      0 
nemsis      0 
mortal enemy     0 
dtype: int64 

請注意,您的示例中存在拼寫錯誤,並且此方法無法捕獲這些錯誤。

0

假設你的輸入被存儲在一個名爲df數據幀格式如下:

person type 
john  friend+work 
jack  work 
judy  college 
janet friend+work 
jean  friend 

唯一的要求是,你有一個分隔符,在這種情況下'+'。你可以做的是:

df['type'].str.split('+').str.join(sep='+').str.get_dummies(sep='+').sum(axis=0) 

輸出:

college 1 
friend  3 
work  3 

,只要你想你可以有很多類,沒有必要知道他們提前。