我想知道以下R代码的Python(Pandas)等价物是什么:
outDataFrame <- myDataFrame[, rownames(inputDataFrame), drop=FALSE]
结果outDataFrame应该有:
我希望这是可以理解的......
亲切的问候
R上。
答案 0 :(得分:0)
一种方法是使用numpy.dot
:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame ( { 'A':[False, True], 'B':[True, False] }, index=['row1', 'row2'] )
>>> df
A B
row1 False True
row2 True False
[2 rows x 2 columns]
>>> pd.DataFrame( np.dot( df, df.columns ), index=df.index )
0
row1 B
row2 A
[2 rows x 1 columns]
或者:
>>> df.apply( lambda row: df.columns[row][0], axis=1 )
输出pd.Series
答案 1 :(得分:0)
这是另一种方法,使用np.argmax:
In [55]: myDataFrame = pd.DataFrame([(True,False,False), (False,False,True), (False,False,True)], index=list('ABC'), columns=list('XYZ'))
In [56]: myDataFrame
Out[56]:
X Y Z
A True False False
B False False True
C False False True
[3 rows x 3 columns]
In [58]: pd.Series(myDataFrame.columns[np.argmax(myDataFrame.values, axis=1)], index=myDataFrame.index)
Out[58]:
A X
B Z
C Z
dtype: object
它很长但可能更快,特别是对于大型数据帧:
In [76]: myDataFrame2 = pd.concat([myDataFrame]*10000)
In [77]: %timeit pd.Series(myDataFrame2.columns[np.argmax(myDataFrame2.values, axis=1)], index=myDataFrame2.index)
1000 loops, best of 3: 1.19 ms per loop
In [78]: %timeit pd.Series( np.dot( myDataFrame2, myDataFrame2.columns ), index=myDataFrame2.index )
100 loops, best of 3: 5.72 ms per loop
In [79]: %timeit myDataFrame2.apply(lambda row: myDataFrame2.columns[row][0], axis=1)
1 loops, best of 3: 1.15 s per loop
答案 2 :(得分:0)
myinput是df1和df2:
df1 = pd.DataFrame([(True,False,False), (False,False,True), (False,False,True)], index=list('XYZ'), columns=list('ABC'))
df2 = pd.DataFrame([(1,2,1), (1,0,0), (1,1,1)], index=list('ABC'), columns=list('IJK'))
,结果应与:
相同 0
X A
Y C
Z C