【发布时间】:2020-09-15 19:24:48
【问题描述】:
我知道已经发布了一个类似的问题,我已经用尽了所有这些问题。我有一个包含以下字段的数据框:
import pandas as pd
df = pd.DataFrame([[0, 1021, 0.00, ["C2"]],
[1, 1023, 0.00, ["C2"]],
[2, 1024, 2.00, ["C1", "C4"]]],
columns=["index", "id", "revenue", "campaign"])
print(df)
导致
index id revenue campaign
0 0 1021 0.0 [C2]
1 1 1023 0.0 [C2]
2 2 1024 2.0 [C1, C4]
我只想创建一个新列“路径”:如果收入为 0,则路径结束为 Null,如果收入>0,则为收入。路径的开始是“开始”
index id revenue campaign path
0 1021 0.00 [C2] ['Start', 'C2', 'Null']
1 1023 0.00 [C2] ['Start', 'C2', 'Null']
2 1024 2.00 [C1, C4] ['Start', 'C1', 'C4', 'Revenue']
如果我在下面做一些事情,它会起作用..但我有十亿行要处理,所以看起来效率不高。
for i in range(0,len(df)):
if(df['revenue'][i] == 0):
df['path'][i] = ['Start'] + df['campaign'][i] + ['Null']
else:
df['path'][i] = ['Start'] + df['campaign'][i] + ['revenue']
但是,如果我在这样的列级别工作,它有时会起作用,但有时会因为我只能将列表连接到列表的错误而中断。
df['path'] = np.where(
df['revenue'] == 0,
['Start'] + df['campaign'] + ['Null'],
['Start'] + df['campaign'] + ['revenue'])
有人可以帮我解决这个问题吗?我将不胜感激。
【问题讨论】:
-
使用
.str.cat(...) -
嗨 idelaney.. 我试图创建一个.. 但是我得到的 dtypes 和我原来 df 的 dtypes 出来不同.. 我不想误导并放弃了..跨度>
-
@thealchemist - 是的,这可能是个问题。我添加了一个我认为是正确的。
-
@tdelaney: 非常感谢你......非常感谢你的支持
-
由于
pandas省略了字符串元素的引号,因此很难判断列条目是否包含列表或看起来像列表显示(甚至是数组)的字符串。并且列 dtype 将是object。因此,如果有可能混合,您的代码必须考虑到这一点。
标签: python pandas numpy dataframe data-analysis