【问题标题】:filling in columns with info from other file based on condition根据条件用其他文件中的信息填充列
【发布时间】:2020-06-22 09:31:08
【问题描述】:

所以我正在使用 2 个 csv 文件: 文件 1:

City     KWR1 KWR2 KWR3

Killeen
Killeen
Houston
Whatever

文件2:

location link                      reviews
Killeen  www.example.com           300
Killeen  www.differentexample.com  200
Killeen  www.example3.com          100
Killeen  www.extraexample.com      20

这就是我试图让这段代码做的事情: 查看文件 1 中的“城市”,获取文件 2 中的前 3 个链接(您可以继续假设城市不会混淆),然后将这些前 3 个链接放入所有相同“城市”的 KWR1 KWR2 KWR3 列' 值。

所以它会获得前 3 个,然后将它们复制到所有相同“城市”值的右侧。

即使正确地提出这个问题对我来说也很困难,希望我已经提供了足够的信息。 我知道如何用 pandas 和所有这些读取文件,只是无法在...中编码这种确切的情况。

【问题讨论】:

    标签: python excel pandas csv conditional-statements


    【解决方案1】:

    这是一个不寻常的要求,但我认为您需要三个步骤: 1. 只保留您实际需要的前三个值。

    df = df.sort_values(by='reviews',ascending=False).groupby('location').head(3).reset_index()
    

    希望这仅保留每个城市的前三个。 然后您需要以某种方式标记您的数据,可能有更好的方法来做到这一点,但这里有一种方法:- 您分配一个带有数字的新列并创建一个用户定义的函数

    import numpy as np
    df['nums'] = np.arange(len(df))
    

    现在你有一列充满了数字(有点像行号) 您创建您的函数,然后将标记您的数据...

    def my_func(index):
        if index % 3  ==0 :
            x = 'KWR' + str(1)
        elif index % 3 == 1:
            x = 'KWR' + str(2)
        elif index % 3 == 2:
            x = 'KWR' + str(3)
        return x    
    

    然后您可以创建您需要的标签:

    df['labels'] = df.nums.apply(my_func)
    

    那么你可以这样做:

    my_df = pd.pivot_table(df, values='reviews', index=['location'], columns='labels', aggfunc='max').reset_index()
    

    从字面上提取标签(枢轴)并将值放入正确的位置。

    【讨论】:

    • 当我只使用一个城市时,这非常有效,问题是我有一个循环可以为多个“位置”运行它并且它不断覆盖第一行:` City KWR1 KWR2 KWR3 Killeen link1 link2 link3 Houston ` ` 然后循环运行到 Houston 并获取这些链接,但是: City KWR1 KWR2 KWR3 Killeen link4 link5 link6 Houston ` 所以它将休斯顿的链接放在与 killeen 的第一个链接相同的位置。
    • 我怀疑你能看到我试图放入该评论的结构:/ 基本上,我可以让城市对齐,这样休斯顿的链接就不会被粘贴到基林的地方吗?
    • 多个位置的循环是什么意思?代码的第一行按城市排序并保留前 3 个值...应该没有循环或迭代
    • 循环用于不同的 df。它循环是因为我多次运行我的 api 以获取第一个文件中每个城市的第二个 df(第二个文件)。第二个文件中的信息根本没有与相应的城市排列。因此,如果 api 为休斯顿运行,则它的结果(链接)不会放在休斯顿旁边,而只是再次放在首位(覆盖它获得的先前链接。)
    猜你喜欢
    • 2020-09-14
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多