【发布时间】:2020-11-14 23:49:24
【问题描述】:
我希望连接数据框中的两列,如果有重复,则在末尾附加一个整数。这里的问题是我将继续接收数据源,增量需要了解生成的历史值,而不是重复使用它们。
我一直在尝试使用 apply 函数来执行此操作,但是当单个接收到的数据集中有重复项时我遇到了问题,我无法在不迭代的情况下找到一种方法来执行此操作数据框(通常不受欢迎)。
我已经做到了这一点:
import pandas as pd
def gen_summary(color, car, blacklist):
exists = True
increment = 0
summary = color + car
while exists:
if summary in blacklist:
increment += 1
summary = color + car + str(increment) # Append increment if in burn list
else:
exists = False # Exit this loop
return summary
def main():
blacklist = ['RedToyota', 'BlueVolkswagon', 'BlueVolkswagon1', 'BlueVolkswagon2']
df = pd.DataFrame(
{'color': ['Red', 'Blue', 'Blue', 'Green'],
'car': ['Toyota', 'Volkswagon', 'Volkswagon', 'Hyundai'],
'summary': ['', '', '', '']}
)
#print(df)
df["summary"] = df.apply(lambda x: gen_summary(x['color'], x['car'], blacklist), axis=1)
print(df)
if __name__ == "__main__":
main()
输出:
color car summary
0 Red Toyota RedToyota1
1 Blue Volkswagon BlueVolkswagon3
2 Blue Volkswagon BlueVolkswagon3
3 Green Hyundai GreenHyundai
请注意,BlueVolkswagon1 和 BlueVolkswagon2 在以前的数据馈送中使用过,因此这里必须从 3 开始。真正的问题是,只有这个数据集中有重复的 BlueVolkswagon 值,所以它不能正确递增并重复 BlueVolkswagon3,因为我无法在将函数应用于整个数据集的过程中更新历史记录。
是否有一些优雅的 Pythonic 方法可以做到这一点,我无法理解,或者这是一个迭代数据框确实有意义的场景?
【问题讨论】:
标签: python python-3.x pandas dataframe