【问题标题】:How can I compare a DataFrame with if condition?如何将 DataFrame 与 if 条件进行比较?
【发布时间】:2019-06-21 16:31:29
【问题描述】:

如何使用这个 if 条件创建一个新的 DataFrame?

df = pd.DataFrame()
trips = pd.read_csv('trips.csv')
stops = pd.read_csv('stops.csv')
stop_times= pd.read_csv('stop_times.csv')

route_id = trips['route_id']
trip_id = trips['trip_id'] #deve coincidere con rip_id_stopTimes
direction_id = trips['direction_id']  # 0 -> andata, 1 -> ritorno

trip_id_stopTimes = stop_times['trip_id'] #deve coincidere con trip_id
stop_id = stop_times['stop_id'] #deve coincidere con stop_code

stop_code = stops['stop_code'] #deve coincidere con stop_id
stop_lat = stops['stop_lat']
stop_lon = stops['stop_lon']
stop_name = stops['stop_name']

#here is the problem
if str(trip_id_stopTimes) == str(trip_id) and str(stop_id) == str(stop_code):
    df['NUMEROAMAT'] = route_id
    df['IDVIAGGIO'] = trip_id
    df['ANDATA/RITORNO'] = direction_id
    df['IDVIAGGIO2'] = trip_id_stopTimes
    df['IDFERMATA'] = stop_id
    df['IDFERMATA2'] = stop_code
    df['LATITUDINEFERMATA'] = stop_lat
    df['LONGITUDINEFERMATA'] = stop_lon
    df['NOMEFERMATA'] = stop_name

df.to_csv('Amat_finale.csv', index=False, encoding='utf-8')

我必须根据 if 条件创建一个新的 DataFrame。

【问题讨论】:

  • 有点难以理解(参见stackoverflow.com/help/minimal-reproducible-example),但似乎df2 = df.loc[(condition1) & (condition2) & ...] 的某些变体(可能包括.copy())就足够了。
  • 同意一些示例输入和输出将非常有帮助。也许您只需要对数据框进行合并,然后选择您想要的数据?
  • 如果我只是执行这段代码,文件“Amat_finale.csv”是空的。我将尝试更好地解释:我想比较整个列,并仅在 if 为真的情况下创建一个新的 DataFrame。

标签: python pandas jupyter-notebook


【解决方案1】:

这会让你到达那里吗?看起来你只是在测试真值。

可以创建一系列事实并使用它来创建您的数据框。现在我已经更仔细地阅读了开头部分,如果没有看到一些数据并能够自己处理一下,就很难准确地给你想要的东西。

truths = (trip_id_stopTimes.apply(str) == trip_id.apply(str)) & \
   (stop_id.apply(str) == stop_code.apply(str))

以上内容为您提供了可用于过滤您的值的真值。想到的一件事是,现在是如何设置的,它假设 csv 文件的长度和顺序相同,等等。您可能需要考虑使用 .merge() 来获取数据帧并将它们连接在一起。

【讨论】:

  • 得到一个错误:ValueError:只能比较标签相同的系列对象
  • 列名错误,它们被设置为变量。现在试试。如果不是,您可能需要确保比较中的对象都是系列对象。
  • 这些文件的索引是否匹配?我认为您在这里看到的一个问题是您正在将特定行相互比较。 IE 第 500 行行程到第 500 行停靠点等。如果您尝试获取它们匹配的实例,您可能需要重新考虑使用 .merge 函数而不是测试真值的策略。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多