如何从数据框中获取系列?

时间:2017-09-29 02:57:11

标签: python-2.7 pandas dataframe

fake = {'EmployeeID' : [0,1,2,3,4,5,6,7,8,9],
             'State' : ['a','b','c','d','e','f','g','h','i','j'],
             'Email' : ['a','b','c','d','e','f','g','h','i','j']
              }
fake_df = pd.DataFrame(fake)

我正在尝试定义一个函数,该函数返回状态中员工的所有电子邮件地址的一系列字符串。电子邮件地址应由给定的分隔符分隔。我想我会使用&#34 ;;"。

参数: - DataFrame - 分隔符(;)

我必须使用for循环?说实话,我甚至不知道如何开始这个......

====版

完成编码后,我应该运行

emails = getEmailListByState(fake_df, ", ")
for state in sorted(emails.index):
    print "%15s: %s" % (state, emails[state])

应该得到像

这样的东西
a: a
b: b
c: c,d
d: e
e: f,g

作为我的输出

1 个答案:

答案 0 :(得分:1)

如果我正确理解问题你正在寻找groupby状态,请收到电子邮件并申请加入,即根据状态加入电子邮件,即

fake = {'EmployeeID' : [0,1,2,3,4,5,6,7,8,9],
         'State' : ['NZ','NZ','NY','NY','ST','ST','YK','YK','YK','YK'],
         'Email' : ['ab@h.com','bab@h.com','cab@h.com','dab@h.com','eab@h.com','fab@h.com','gab@h.com','hab@h.com','iab@h.com','jab@h.com']
          }
fake_df = pd.DataFrame(fake)

ndf = fake_df.groupby('State')['Email'].apply(', '.join)

输出:

State
NY                          cab@h.com, dab@h.com
NZ                           ab@h.com, bab@h.com
ST                          eab@h.com, fab@h.com
YK    gab@h.com, hab@h.com, iab@h.com, jab@h.com
Name: Email, dtype: object

如果你想在方法中那么

def getEmailListByState(df,delim):
    return df.groupby('State')['Email'].apply(delim.join)

emails = getEmailListByState(fake_df, ", ")
for state in sorted(emails.index):
    print( "%15s: %s" % (state, emails[state])