【问题标题】:How to get a new DF column from iterating over two other Dataframes columns?如何通过迭代其他两个 Dataframes 列来获取新的 DF 列?
【发布时间】:2019-12-25 17:30:00
【问题描述】:

我有两个数据框 df1,df2。 df1['A'] 包含一个单词列表。 df2['b'] 包含几个单词。我需要有一个单独的 df3,我需要说出 df1['A'] 中有多少个 df['b'] 单词。

我是 python 新手,我的解决方案是一个非常不雅的“for 循环”,我在其中迭代 df1['A'] 的单词并迭代 df2['b'] 的单词并检查和设置计数。 我相信有更好更快的方法来实现这一目标。谁能指出我正确的方向? ****更新**** 对不起,不清楚的问题。以下是我想要实现的目标的表示。 data

非常感谢您的帮助。

【问题讨论】:

  • 请分享一些示例数据
  • 它们必须在同一行吗?如果一个单词在 df2['b'] 中出现两次会怎样,你算一次还是两次?请提供代码示例
  • 列的长度是否相同?

标签: pandas loops dataframe


【解决方案1】:

我认为为了您的利益,您应该开始研究函数调用。尽管它们随着正在处理的数据量而扩展得非常厉害,但在您的情况下,性能可能可以忽略不计。

'''
Create a dataframe from the cartesian product of two other dataframes:

    df1 = pd.DataFrame({'a': [['red apples', 'ripe oranges'],
                              ['ripe mangoes', 'unripe pineapple']]})

    df2 = pd.DataFrame({'b': ['apples, mangoes', 'grapes, mangoes, pineapple']})
    p = [[x[0], y[0]] for x,y in product(df1.values.tolist(), df2.values.tolist())]

    df = pd.DataFrame(p)
'''

def get_counts(row):
    return sum(1 for item in row[1].split(', ') for thing in row[0] if item in thing)

df['count'] = df.apply(get_counts, axis=1)

print(df)

你也可以这样做:

df[1] = df[1].str.split(', ').apply(set)
df[0] = df[0].str.join(' ').str.split()
df['count'] = df.apply(lambda x: x[1].intersection(x[0]), axis=1).apply(len)

如果你只想要计数,

#As series: 
df = df['count']

#As dataframe:
df = df[['count']]

【讨论】:

  • 谢谢。为了更清楚,我将 df3 放在列中。我不想要第三个数据框中的两列。只是计数。所以要发挥作用,我基本上需要传递 df1 的行和 df2 的行。我用 for 循环做到了。任何python方法可以做到这一点?谢谢
  • 取决于你真正想要的输出,这并不需要用 pandas 来完成,仅供参考,但值得学习。我编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2019-02-27
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多