Pandas .apply()子函数正在改变主数据帧

时间:2014-02-16 18:14:26

标签: python group-by pandas data-mining

Pandas / Python用户,

我正在尝试分析x和y坐标数据,但是要分组。 出于某种原因,当我将列的值拉出到一个系列中以逐个分析它们然后尝试返回完整的数据帧时,某些列会被删除。 我不确定为什么我的主数据框在我没有做任何修改时被修改。

代码:

import pandas as pd
import numpy as np


def eventDetector(x):
    x_arr = pd.Series(x['X_COOR'].values.copy())
    y_arr = pd.Series(x['Y_COOR'].values.copy())
    print('For x returned: %s for y: %s' % (x_arr.values, y_arr.values))
    for x, y in zip(x_arr, y_arr):
        1+1
        print('Here are the x: %s and y: %s' % (x, y))
    return x


prev_x = 0
prev_y = 0

df = pd.read_csv('/users/aleksarias/desktop/SubS.csv')
df.sort(['WA', 'MRG', 'DATETIME'], inplace=True)
dfg = df.groupby(['WA', 'MRG'])
print(dfg.head(1))
dfa = dfg.apply(eventDetector)
print(dfa.head())

输入:

              WA    LEV        DATETIME    MRG    X_COOR    Y_COOR
WA MRG                                                            
4  10_10 714   4  6317C   11/8/13 17:24  10_10 -25901000 -33021000
   10_12 716   4  9295T  11/25/13 10:46  10_12 -27604000 -21857000
   10_13 720   4  2965S   10/14/13 1:56  10_13 -27887187 -12670910
   10_14 722   4  6025P    11/4/13 9:26  10_14 -25534000  -7426000
   10_15 726   4  6817C  11/13/13 10:09  10_15 -30274000   -397000
   10_16 730   4  6025P    11/4/13 9:26  10_16 -25265000   4181000
   10_17 733   4  4865S  10/27/13 15:56  10_17 -28157000  10448000
   10_18 735   4  4975C   10/29/13 5:22  10_18 -28182842  10506772
   10_19 736   4  5906C   11/3/13 11:36  10_19 -26065098  19681040
   10_21 738   4  6025P    11/4/13 9:26  10_21 -25388000  34586000
   10_23 742   4  4865S  10/27/13 15:56  10_23 -27075000  42340000
   10_24 746   4  4975C   10/29/13 5:22  10_24 -27812334  44613674
   10_25 748   4  4865S  10/27/13 15:56  10_25 -25996000  53117000

输出(print(dfa.head())):

WA  MRG  
4   10_10   -25901000
    10_12   -27604000
    10_13   -29411000
    10_14   -25423000
    10_15   -25740000
dtype: int64

1 个答案:

答案 0 :(得分:1)

def eventDetector(x):                                    # 1
    x_arr = pd.Series(x['X_COOR'].values.copy())
    y_arr = pd.Series(x['Y_COOR'].values.copy())
    print('For x returned: %s for y: %s' % (x_arr.values, y_arr.values))
    for x, y in zip(x_arr, y_arr):                       # 2
        1+1
        print('Here are the x: %s and y: %s' % (x, y))
    return x                                             # 3
  1. 此处x是一个DataFrame。
  2. 现在,x被重新分配给x_arr
  3. 中的值
  4. 返回的值是x的当前值,这是最后一个值 x_arr中的值,而不是原始DataFrame。