我有以下索引的DataFrame与命名列和行不连续数字:
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
Run Code Online (Sandbox Code Playgroud)
我想'e'在现有数据框中添加一个新列,并且不希望更改数据框中的任何内容(即,新列始终与DataFrame具有相同的长度).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的版本join,append,merge,但我没有得到我想要的结果,只在最错误.如何e在上面的示例中添加列?
假设我有一个df列'ID', 'col_1', 'col_2'.我定义了一个函数:
f = lambda x, y : my_function_expression.
现在我想应用fto df的两列'col_1', 'col_2'来逐元素地计算一个新列'col_3',有点像:
df['col_3'] = df[['col_1','col_2']].apply(f)
# Pandas gives : TypeError: ('<lambda>() takes exactly 2 arguments (1 given)'
Run Code Online (Sandbox Code Playgroud)
怎么做 ?
** 添加详细示例如下 ***
import pandas as pd
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']
def get_sublist(sta,end):
return mylist[sta:end+1]
#df['col_3'] = df[['col_1','col_2']].apply(get_sublist,axis=1)
# expect above to output df as below
ID col_1 col_2 col_3
0 1 0 …Run Code Online (Sandbox Code Playgroud) 我有一个沿着下面的数据框:
Type Set
1 A Z
2 B Z
3 B X
4 C Y
Run Code Online (Sandbox Code Playgroud)
我想在数据帧中添加另一列(或生成一系列)与数据帧相同的长度(=相等的记录/行数),如果Set ='Z'则设置颜色为绿色,如果Set =否则设置为'red' .
最好的方法是什么?
我有一个有两列的pandas数据框.我需要更改第一列的值而不影响第二列,只需更改第一列值即可返回整个数据框.我怎么能用熊猫申请呢?
如何将参数绑定到Python方法以存储一个用于以后调用的nullary仿函数?与C++类似boost::bind.
例如:
def add(x, y):
return x + y
add_5 = magic_function(add, 5)
assert add_5(3) == 8
Run Code Online (Sandbox Code Playgroud) 在并行Python中,它在提交函数中有一些叫做回调(文档)的东西,但它似乎没有解释得太好.我几天前在他们的论坛上发帖,我没有收到回复.有人会解释回调是什么以及它用于什么?
谢谢.
我正在使用Pandas数据帧,并希望创建一个新列作为现有列的函数.我还没有看到之间的速度差的一个很好的讨论df.apply()和np.vectorize(),所以我想我会问这里.
熊猫apply()功能很慢.根据我的测量结果(如下面的一些实验所示),使用np.vectorize()比使用DataFrame功能快25倍(或更多)apply(),至少在我的2016 MacBook Pro上使用.这是预期的结果,为什么?
例如,假设我有以下带N行的数据框:
N = 10
A_list = np.random.randint(1, 100, N)
B_list = np.random.randint(1, 100, N)
df = pd.DataFrame({'A': A_list, 'B': B_list})
df.head()
# A B
# 0 78 50
# 1 23 91
# 2 55 62
# 3 82 64
# 4 99 80
Run Code Online (Sandbox Code Playgroud)
进一步假设我想创建一个新列作为两列的函数A和B.在下面的例子中,我将使用一个简单的函数divide().要应用该功能,我可以使用df.apply()或np.vectorize():
def divide(a, b):
if b == 0:
return …Run Code Online (Sandbox Code Playgroud) 我有DataFrame一些列.一列包含正在使用其货币的符号,例如欧元或美元符号.另一列包含预算值.因此,例如在一行中它可能意味着5000欧元的预算,而在下一行它可以说2000美元的预算.
在pandas中,我想在我的DataFrame中添加一个额外的列,以欧元标准化预算.所以基本上,对于每一行,如果货币列中的符号是欧元符号,则新列中的值应该是预算列*1中的值,新列中的值应该是预算列的值*如果货币栏中的符号是美元符号,则为0.78125.
我知道如何添加一列,其值填充它,从另一列等的值复制但不知道如何有条件地基于其他列的值填充新列.
有什么建议?
我有一个pandas数据框,sample其中一个被调用的列PR应用了lambda函数,如下所示:
sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)
Run Code Online (Sandbox Code Playgroud)
然后,我得到以下语法错误消息:
sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想要如果条件成立,df[df["tg"] > 10然后df[df["tg"] < 32乘以五,否则除以二。但是,我收到以下错误
ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
d = {'year': [2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001],
'day': [1, 2, 3, 4, 1, 2, 3, 4,],
'month': [1, 1, 1, 1, 2, 2, 2, 2],
'tg': [10, 11, 12, 13, 50, 21, -1, 23],
'rain': [1, 2, 3, 2, 4, 1, 2, 1]}
df = pd.DataFrame(data=d)
print(df)
[OUT]
year day month tg rain
0 2001 1 1 10 1
1 2001 2 …Run Code Online (Sandbox Code Playgroud) pandas ×8
python ×8
dataframe ×6
numpy ×2
arrays ×1
callback ×1
lambda ×1
performance ×1
python-3.5 ×1