簡體   English   中英

如何計算python pandas中的特定列值?

[英]How to count particular column values in python pandas?

我有如下數據框:

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'AAA',4:'CCC',5:'DDD',6:'EEE',7:'EEE',8:'FFF'},
        'identity' :{0:'AD',1:'AD',2:'AU',3:'AU',4:'AU',5:'AZ',6:'AU',7:'AZ',8:'AZ'}}

我想檢查數據框中的sym列。 我的意圖是生成兩個不同的文件,一個包含不同順序的相同兩列,第二個文件包含 sym,sym_count,AD_count,AU_count,neglected_count 列。

編輯 1 -

我想避免(AD&AU)以外的身份。 在兩個輸出文件中,我都不想要 AD 和 AU 身份的結果。 ignoreed_count列是可選的。

預期結果-

結果.csv

sym,identity
AAA,AD
AAA,AU
BBB,AD
CCC,AU
CCC,AU
EEE,AU

result_count.csv

sym,sym_count,AD_count,AU_count,neglected_count
AAA,2,1,1,0
BBB,1,1,0,0
CCC,2,0,2,0
EEE,2,0,1,1

我如何在 python pandas 中執行這種類型的計算?

我認為您需要帶有insert crosstab ,以便將sum列添加到第一個位置並將add_suffix到列名。

最后寫入到to_csv

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'AAA',4:'CCC',5:'DDD',6:'EEE',7:'EEE',8:'FFF'},
        'identity' :{0:'AD',1:'AD',2:'AU',3:'AU',4:'AU',5:'AZ',6:'AU',7:'AZ',8:'AZ'}}
df = pd.DataFrame(df1_data, columns=['sym','identity'])
print (df)
   sym identity
0  AAA       AD
1  BBB       AD
2  CCC       AU
3  AAA       AU
4  CCC       AU
5  DDD       AZ
6  EEE       AU
7  EEE       AZ
8  FFF       AZ

#write to csv
df.to_csv('result.csv', index=False)
#need vals only in identity
vals = ['AD','AU']

#replace another values to neglected
neglected = df.loc[~df.identity.isin(vals), 'identity'].unique().tolist()
neglected = {x:'neglected' for x in neglected}
print (neglected)
{'AZ': 'neglected'}

df.identity = df.identity.replace(neglected)

df1 = pd.crosstab(df['sym'], df['identity'])
df1.insert(0, 'sym', df1.sum(axis=1))
df2 = df1.add_suffix('_count').reset_index()
#find all rows where is 0 in columns with vals
mask = ~df2.filter(regex='|'.join(vals)).eq(0).all(axis=1)
print (mask)
0     True
1     True
2     True
3    False
4     True
5    False
dtype: bool

#boolean indexing
df2 = df2[mask]
print (df2)
identity  sym  sym_count  AD_count  AU_count  neglected_count
0         AAA          2         1         1                0
1         BBB          1         1         0                0
2         CCC          2         0         2                0
4         EEE          2         0         1                1

df2.to_csv('result_count.csv', index=False)

暫無
暫無

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

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