基于具有特定值的行创建新数据框

Tom*_*Tom 2 python dataframe pandas

我有一个大型的事务数据框,我想根据某个列("类型")分成两个较小的数据帧.如果"Type"为"S",则将整行添加到"cust_sell"数据帧,如果"Type"为"cust_buy"数据帧,则为"P".我正在使用for循环,但这只是将索引值添加到数据帧.任何帮助表示赞赏!

from win32com.shell import shell, shellcon
import pandas as pd

filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + '\MSRB T-1_test.xlsx'
wb = pd.read_excel(filename, sheet_name='T1-20062017', index_col=0, header=0)
cust_buy = []
cust_sell = []

# Create a list of customer buys and sells separately
for i in wb.index:
    if wb['Type'][i] == 'S':
        cust_sell.append([i])
    elif wb['Type'][i] == 'P':
        cust_buy.append([i])
Run Code Online (Sandbox Code Playgroud)

Ank*_*nha 9

您不需要编写循环.你可以用熊猫轻松完成.

假设您的数据框如下所示:

import pandas as pd  

mainDf = pd.DataFrame()
mainDf['Type'] = ['S', 'S', 'S', 'P', 'P', 'S', 'P', 'S']
mainDf['Dummy'] = [1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

要为S和P类型创建数据框,您可以这样做:

cust_sell = mainDf[mainDf.Type == 'S']
cust_buy = mainDf[mainDf.Type == 'P']
Run Code Online (Sandbox Code Playgroud)

cust_sell输出:

  Type  Dummy
0    S      1
1    S      2
2    S      3
5    S      6
7    S      8
Run Code Online (Sandbox Code Playgroud)

cust_buy输出:

  Type  Dummy
3    P      4
4    P      5
6    P      7
Run Code Online (Sandbox Code Playgroud)