gpt4 book ai didi

python - 在 Pandas 中自动创建 DataFrame

转载 作者:行者123 更新时间:2023-12-01 01:45:59 25 4
gpt4 key购买 nike

我正在尝试为自己创建一个会计工具。我的 DataFrame 看起来像这样:

d = {'a': [1000, 2000, 3000], 'x': [999, 888, 555], 'y': [555, 999, 888]}
df = pd.DataFrame(data=d)

a x y
0 1000 999 555
1 2000 888 999
2 3000 555 888

其中xy是对应的账户号码(即999表示银行账户等),a是美元价格。我想为每个帐户创建新的 DataFrame,其中包含相应行中的列 a 中的值,而不是帐号。

对于999,它看起来像这样

    x    y
0 1000 0
1 0 2000

对于555,它看起来像这样

    x    y
0 0 1000
1 3000 0

等等。

我为第一个帐户执行了此代码,它有效,但看起来太复杂了。

df2 = df.copy(deep=True)
df2 = df[(df2.x == 999) | (df2.y == 999)]
def fx(p):
if p == 999:
return 1
else:
return 0
df2.x = df2.x.apply(fx)
df2.y = df2.y.apply(fx)
df2.x = df2.x.replace(1, df2.a)
df2.y = df2.y.replace(1, df2.a)
del df2['a']

有没有办法简化它并为每个帐户执行此操作?我不想复制代码并为每个帐户粘贴代码。

预先感谢您,我已经被这个问题困扰了几天了。

我在 Ubuntu 16.04.4 Xenial 上使用 python 2.7.12

最佳答案

您可以通过 xy 列的唯一值创建带有键的 DataFrames 字典:

#convert columns to numpy array
arr = df[['x','y']].values
a = df['a'].values

#empty dictionary
dfs = {}
#loop by all unique values
for i in np.unique(arr.ravel()):
#create 2d boolean mask
mask = (arr == i)
#convert mask to integers - Trues are 1 anf False are 0 and multiple by a
out = a[:, None] * mask.astype(int)
#filter out only 0 rows and create DataFrame
df = pd.DataFrame(out[mask.any(axis=1)], columns=['x','y'])
#print (df)
#add df to dict
dfs[i] = df

通过查找选择:

print (dfs[999])   
x y
0 1000 0
1 0 2000

print (dfs[555])
x y
0 0 1000
1 3000 0

关于python - 在 Pandas 中自动创建 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com