Python 使用列和行作为参数遍历整个数据帧
我有一个空的pandas数据框和一个函数值(x,y),它接受两个参数,pandas数据框中点的行号和列号。我想知道是否有一种更简单的方法可以使用这些参数(可能是使用df.apply)遍历整个空数据帧 我知道可以遍历每个单独的列并在单独的列上运行df.apply,但是可以不运行任何循环或类似的操作吗 本质上,我正在寻找这样的东西,我可以在整个数据帧上运行Python 使用列和行作为参数遍历整个数据帧,python,pandas,python-2.7,dataframe,sklearn-pandas,Python,Pandas,Python 2.7,Dataframe,Sklearn Pandas,我有一个空的pandas数据框和一个函数值(x,y),它接受两个参数,pandas数据框中点的行号和列号。我想知道是否有一种更简单的方法可以使用这些参数(可能是使用df.apply)遍历整个空数据帧 我知道可以遍历每个单独的列并在单独的列上运行df.apply,但是可以不运行任何循环或类似的操作吗 本质上,我正在寻找这样的东西,我可以在整个数据帧上运行 df_copy.apply(lambda x: myfunction(x.value, x.column)) 0 1 2 3
df_copy.apply(lambda x: myfunction(x.value, x.column))
0 1 2 3 4
10 1 1 1 1 1
20 1 1 1 1 1
30 1 1 1 1 1
40 1 1 1 1 1
50 1 1 1 1 1
然而,x.column不存在,所以有另一种方法来做,或者我做错了什么
谢谢 是,使用序列的
名称
和索引
属性:
df = pd.DataFrame(1, index = np.arange(10,51,10), columns = np.arange(5))
显示输入数据帧
df_copy.apply(lambda x: myfunction(x.value, x.column))
0 1 2 3 4
10 1 1 1 1 1
20 1 1 1 1 1
30 1 1 1 1 1
40 1 1 1 1 1
50 1 1 1 1 1
让我们定义自定义函数并使用行作为列来进行计算
def f(x):
#add row values to column values
return x.name + x.index
df.apply(f)
输出:
0 1 2 3 4
10 10 11 12 13 14
20 20 21 22 23 24
30 30 31 32 33 34
40 40 41 42 43 44
50 50 51 52 53 54
A B C D E
Ted Ted_A Ted_B Ted_C Ted_D Ted_E
Bill Bill_A Bill_B Bill_C Bill_D Bill_E
Ralph Ralph_A Ralph_B Ralph_C Ralph_D Ralph_E
John John_A John_B John_C John_D John_E
Tim Tim_A Tim_B Tim_C Tim_D Tim_E
注意:apply
将数据帧的每一列(这是一个pd系列)传递到函数f中。每个系列都有一个属性name
,它是列标题,还有一个属性index
,它是数据帧行索引。所以,函数f为数据帧的每一列返回一个计算出的pd.Series,并作为数据帧放回一起
在评论中回答问题,让我们使用字符串:
df = pd.DataFrame(1, index=['Ted','Bill','Ralph','John','Tim'], columns=['A','B','C','D','E'])
def f(x):
#Concatenate row values with column values
return x.index + '_' + x.name
df.apply(f)
或者使用lambda函数
df.apply(lambda x: x.index + '_' + x.name)
输出:
0 1 2 3 4
10 10 11 12 13 14
20 20 21 22 23 24
30 30 31 32 33 34
40 40 41 42 43 44
50 50 51 52 53 54
A B C D E
Ted Ted_A Ted_B Ted_C Ted_D Ted_E
Bill Bill_A Bill_B Bill_C Bill_D Bill_E
Ralph Ralph_A Ralph_B Ralph_C Ralph_D Ralph_E
John John_A John_B John_C John_D John_E
Tim Tim_A Tim_B Tim_C Tim_D Tim_E
你试过什么?请检查并创建@user3483203,这是否提供了更多的说明?因此,这是可行的,但是,x.name和x.index是RangeIndex对象-是否有任何方法将这些值转换为整数是的,我在解决方案中附上了一个示例。