我使用Titanic Kaggle数据作为探索熊猫的手段。我试图找出如何在.ix [](或其他方面)中使用if语句。我有一个数据透视表我用来在我的主数据帧中获取查找值。这是数据透视表的一大块(名为'数据'):
src
现在我想通过主数据框中的每一行来分配它的查找值。查找硬编码的值没问题,如:
Survived Count % Female Survived % Male Survived \
Sex female male female male
Embarked Pclass
C 1 42 17 43 42 97.67 40.48
2 7 2 7 10 100.00 20.00
3 15 10 23 43 65.22 23.26
但是,当尝试插入动态部分以包含if语句时,事情就不那么好了:
df['Chance of Survival'] = data.ix['C']['% Female Survived'].get(1)
97.67
因此,我的主数据框中的所需输出如下所示:
df['Chance of Survival'] = data.ix[df.Embarked][('% Female Survived' if df.Sex == 'female') | ('% Male Survived' if df.Sex=='male')].get(df.Pclass)
提前致谢! :)
答案 0 :(得分:1)
得到它,但万一其他人有类似的问题。或者更好的是,如果有人有更好的方法。 :)
Traceback (most recent call last):
File "E:/PythonProjects/skypy/skypy/codebase/utils/crypto.py", line 32, in <module>
print(RSAPubKey.encrypt("Hello.", 32))
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 150, in encrypt
return pubkey.pubkey.encrypt(self, plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\pubkey.py", line 75, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 224, in _encrypt
return (self.key._encrypt(c),)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\_slowmath.py", line 65, in _encrypt
return pow(m, self.e, self.n)
TypeError: unsupported operand type(s) for pow(): 'str', 'int', 'int'
所以任何想要根据另一个数据帧的值在一个数据帧的列中赋值的人。我使用.ix []向下钻取到值,然后使用.apply()在每一行(axis = 1)上应用一个函数,就像查询数据帧一样找到行的值。 ( 'line.element'/线[ '元件'])
答案 1 :(得分:0)
据我了解您的问题,您希望为现有数据框指定值,而您当前正在使用DataFrame.ix
您可能需要的方法是DataFrame.loc,其工作方式如下:
df = pd.DataFrame({'foo':[1,2,3,4], 'bar':[1,2,3,4]})
df
bar foo
0 1 1
1 2 2
2 3 3
3 4 4
df.loc[1]['foo'] = 4
df
bar foo
0 1 1
1 2 4
2 3 3
3 4 4
如果要分配给新列,只需先创建它们,只需
即可df['newcolumn'] = np.nan
然后你可以用上面的代码分配它。