如何解决比较两个序列列,并根据条件将元素添加到 Dataframe 你好,我正在寻找一个脚本可以帮助我解决以下问题的 Python:我试过了,但我的逻辑不起作用
你好,我正在寻找一个脚本可以帮助我解决以下问题的 Python:
有以下两列,我需要在序列之间创建间隙以使它们匹配:
输入 | 输出 | |||
---|---|---|---|---|
索引 | A 列 | B列 | A 列 | B列 |
0 | 1 | 1 | 1 | 1 |
1 | 2 | 2 | 2 | 2 |
2 | 2 | 2 | 2 | 2 |
3 | 3 | 3 | 3 | 3 |
4 | 4 | 3 | 3 | |
5 | 5 | 4 | 4 | 4 |
6 | 5 | 5 | 5 | 5 |
7 | 6 | 5 | 5 | 5 |
8 | 8 | 6 | 6 | 6 |
9 | 8 | 8 | 8 | 8 |
10 | 9 | 8 | 8 | 8 |
11 | 10 | 9 | 9 | 9 |
12 | 11 | 9 | 9 | |
13 | 11 | 10 | 10 | 10 |
14 | 15 | 13 | 11 | |
15 | 16 | 13 | 11 | |
16 | 16 | 14 | 13 | |
17 | 17 | 14 | 13 | |
18 | 17 | 15 | 14 | |
19 | 18 | 15 | 14 | |
20 | 19 | 16 | 15 | 15 |
21 | 21 | 16 | 15 | |
22 | 22 | 17 | 16 | 16 |
23 | 27 | 17 | 16 | 16 |
24 | 17 | 17 | ||
25 | 17 | 17 | ||
26 | 18 | |||
27 | 19 | |||
28 | 21 | |||
29 | 22 | |||
30 | 27 |
我试过了,但我的逻辑不起作用
我使用 Pandas 和 Python 尝试了不同的方法,首先我尝试将列转换为列表并一一迭代它们但没有用,我最接近的方法是这个,但不幸的是仍然不起作用:
for i in df.index:
if(df['column A'][i] != df['column B'][i]):
df['column A'] = df['column A'][:i] + np.NaN + df['column A'][i:]
#df['column A'][i] = df['column A'].append(pd.Series([np.NaN]))
#df2['column A'] = df['column A'].loc[i] = np.NaN
非常感谢您的所有帮助。 (感谢无限)
谢谢
解决方法
在迭代对象时更改对象通常是个坏主意。相反,只需将两个新列表初始化为空,并根据需要使用原始列或 NaN 中的值填充它们。诀窍是分别迭代 A 列和 B 列的索引,以便在另一个列表中填充 NaN 值时只能增加其中一个:
a = df['column A'].values
b = df['column B'].values
a_out = []
b_out = []
i = 0
j = 0
while i < len(df) and j < len(df):
if a[i] == b[j]:
a_out.append(a[i])
i += 1
b_out.append(b[j])
j += 1
elif a[i] < b[j]:
a_out.append(a[i])
i += 1
b_out.append(np.nan)
else:
a_out.append(np.nan)
b_out.append(b[j])
j += 1
if i < j:
a_out.extend(a[i:])
b_out.extend([np.nan] * len(a[i:]))
elif i > j:
b_out.extend(b[j:])
a_out.extend([np.nan] * len(b[j:]))
df_out = pd.DataFrame({'column A': a_out,'column B': b_out})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。