Pandas 将浮点数附加到 for 循环中的列
Posted
技术标签:
【中文标题】Pandas 将浮点数附加到 for 循环中的列【英文标题】:Pandas append float to column in for loop 【发布时间】:2017-03-06 17:26:20 【问题描述】:我有 pandas DataFrame,我想在其中使用 df 中的元素进行一些计算,然后将计算出的数字附加到同一 df 中的单独列中。
这是我现在的代码。
def percentfunction(df):
for i in range(100):
if df['month_number'][i] == 10:
df = df['percent_october'][i].add([df['cellsum'][i]/octobersum])
elif df['month_number'][i] == 11:
df = df['percent_november'][i].add([df['cellsum'][i]/novembersum])
elif df['month_number'][i] == 12:
df = df['percent_december'][i].add([df['cellsum'][i]/decembersum])
AttributeError: 'numpy.float64' object has no attribute 'add'
我尝试了此代码的各种实现,但总是收到错误消息。它要么到达最后一个元素,然后写入仅包含计算的最后一个数字的列,要么在不应该添加任何内容的行中添加。
欢迎批评!
编辑:试图编辑代码。
def percentfunction(df):
for i in range(100):
if df['month_number'][i] == 10:
df['percent_october'][i] = df['cellsum'][i]/octobersum
elif df['month_number'][i] == 11:
df['percent_november'][i] = df['cellsum'][i]/novembersum
elif df['month_number'][i] == 12:
df['percent_december'][i] = df['cellsum'][i]/decembersum
我至少可以运行它,但这会在不应该的行中填充值...
EDIT2:这是我的数据框示例
>>> df.head()
Index month_number month_text \
0 Name1 10 October
1 Name1 11 November
2 Name1 12 December
3 Name2 10 October
4 Name2 11 November
2000 Unnamed: 4 2001 Unnamed: 6 2002 Unnamed: 8 2003 ... \
0 NaN NaN NaN NaN NaN NaN NaN ...
1 NaN NaN NaN NaN NaN NaN NaN ...
2 NaN NaN NaN NaN NaN NaN NaN ...
3 NaN NaN NaN NaN 2898.68 3120 NaN ...
4 NaN NaN NaN NaN NaN NaN NaN ...
Unnamed: 28 2013 Unnamed: 30 2014 Unnamed: 32 2015 Unnamed: 34 2016 \
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN 1.26 127 NaN NaN NaN
Unnamed: 36 cellsum
0 NaN 3899
1 NaN 7922
2 NaN 2181
3 NaN 3121
4 NaN 127
这是我的 DataFrame,“cellsum”是该行中所有“未命名”单元格的总和。我通过对 DataFrame 中的所有数据求和,例如 october cellsums (octobersum) 计算了总月数。然后我想添加一个新列,该列的百分比是多少。我希望你能够明白。
【问题讨论】:
【参考方案1】:您应该避免使用 pandas 循环。您需要这样的东西,然后您可以将其操作为您想要的任何格式:
df["percent_month"] = df.groupby("month_number").apply(lambda x: x/x.sum())
【讨论】:
您好,感谢您的建议。我已经编辑了我的数据框示例,你能看一下吗?【参考方案2】:一个简单的解决方法是使用df.ix[]
df.ix[i,'percent_october'] = df.ix[i,'cellsum']/octobersum
如果您向我们展示 df 的外观,我们可能会为您提供比循环遍历不推荐的数据帧更智能的解决方案
【讨论】:
嗨,我现在用我的 DataFrame 示例编辑了我的帖子。我尝试了您的建议,但不幸的是,它没有奏效。谢谢@史蒂文以上是关于Pandas 将浮点数附加到 for 循环中的列的主要内容,如果未能解决你的问题,请参考以下文章