gpt4 book ai didi

python - 基于 Pandas 中另一列的增量

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:50 24 4
gpt4 key购买 nike

我有 2 列:组和级别范围。每个“组”都有一个水果列表,每个“级别范围”都有级别范围,如“L1-L4”。

期望的结果是下图中的“水果”和“级别”列。

因此,如果范围是“L2-L3”,级别列会为第一行显示“2”,然后为下一行显示“3”。我还想将“组”列表中的每个项目添加到“水果”列。

任何帮助都将不胜感激!谢谢!

enter image description here

这是我完成的工作:

我创建了 2 个辅助列:“level_repeat”和“grouping_repeat”来帮助我复制必要的行。

df['level_repeat'] = df['Level'].replace(['L1-L6', 'L1-L2', 'L1-L3', 'L4-L6', 'L3-L6', 'L2-L6'], [6, 2, 3, 2, 3, 4])

df['grouping_repeat'] = df['Group'].str.len()

df_new = pd.DataFrame([df.ix[idx] for idx in df.index
for _ in range(df.ix[idx]['level_repeat'])]).reset_index(drop=True)

df_new = pd.DataFrame([df_new.ix[idx] for idx in df_new.index
for _ in range(df_new.ix[idx]['grouping_repeat'])]).reset_index(drop=True)

结果是上面的示例有 10 行,其中组有 2 个项目,级别范围跨越 5 个级别 (2*5=10)。但是,我仍然需要帮助将数据插入“水果”和“级别”列。

最佳答案

我不太确定如何在不遍历数据框的情况下执行此操作。可能有更好的解决方案,但我没有想到。无论如何:

res = []
for _, row in df.iterrows():
group = row['Group']
lv_range_str = row['Level Range']

#change this line if the format of 'Level Range' changes
lv_range = range(lv_range_str[1], lv_range_str[4] + 1)

res += [
{
'Group': group,
'Level Range': lv_range_str,
'Fruit': fruit,
'Level': level
}
for level in lv_range
for fruit in group
]

res = pd.DataFrame(res)

只有当 Level Range 中的所有字符串都采用 L{i}-L{j} 格式时才有效,否则您需要更改定义lv_range
的如果您的数据集很大,则可能需要一些时间

关于python - 基于 Pandas 中另一列的增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51103196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com