2024-05-14 09:18:01 发布
网友
我正在尝试从现有的a、B、C列创建一个新的D列
遵循此模式,列D中的其余值是此模式的迭代。请参考图表
有什么代码想法吗
单击链接以查看图片
我们可以使用^{}来创建一个数据帧,其中包含A,B,C列中的值通过连续迭代列并根据条件从该列中选择下一个值来填充,然后使用^{}通过删除NaN值来对数据帧进行聚合:
A
B
C
NaN
d = pd.concat([df[col].iloc[i::df.columns.size] for i, col in enumerate(df.columns)], axis=1) df['D'] = d.agg(lambda s: s.dropna().iloc[0], axis=1)
结果:
# print(df) A B C D 0 A1 B1 C1 A1 1 A2 B2 C2 B2 2 A3 B3 C3 C3 3 A4 B4 C4 A4 4 A5 B5 C5 B5 5 A6 B6 C6 C6
还有一种方法:
import pandas as pd import numpy as np #Create input dataframe: df = pd.DataFrame(index=[*'123456'], columns=[*'ABC']) df = df.apply(lambda x: x.name+x.index) df
输入数据帧:
A B C 1 A1 B1 C1 2 A2 B2 C2 3 A3 B3 C3 4 A4 B4 C4 5 A5 B5 C5 6 A6 B6 C6
将cumsum与lookup一起使用:
cumsum
lookup
s = ((df['A'].notna().cumsum()-1) % df.shape[1]) df['d'] = df.lookup(df.index, df.columns[s]) df
输出:
A B C d 1 A1 B1 C1 A1 2 A2 B2 C2 B2 3 A3 B3 C3 C3 4 A4 B4 C4 A4 5 A5 B5 C5 B5 6 A6 B6 C6 C6
以下是一个解决方案(为了更清晰,分两个步骤):
df = pd.DataFrame({"a": range(0, 10), "b": range(10, 20), "c": range(20, 30)}) df["inx"] = range(len(df)) df["d"] = np.where(df.inx % 3 == 0, df["a"], np.where(df.inx % 3 == 1, df["b"], df["c"])) df = df.drop("inx", axis="columns")
a b c d 0 0 10 20 0 1 1 11 21 11 2 2 12 22 22 3 3 13 23 3 4 4 14 24 14 5 5 15 25 25 6 6 16 26 6 7 7 17 27 17 8 8 18 28 28 9 9 19 29 9
我们可以使用^{} 来创建一个数据帧,其中包含} 通过删除
A
,B
,C
列中的值通过连续迭代列并根据条件从该列中选择下一个值来填充,然后使用^{NaN
值来对数据帧进行聚合:结果:
还有一种方法:
输入数据帧:
将
cumsum
与lookup
一起使用:输出:
以下是一个解决方案(为了更清晰,分两个步骤):
结果:
相关问题 更多 >
编程相关推荐