英文:
concatenate/ Join string onto itself X number of times based on column value separated by the character "|" (pipe)
问题
我正在处理一个谜题,在一个“rate”列中列出了一个金额值(字符串)。在处理这个速率列时,我需要将速率乘以“nights”列,并使用“|”管道字符分隔每个速率值(字符串)。永远不会在第一个或最后一个位置需要管道字符。
您可以提供的任何帮助,以使我能够继续前进,我将不胜感激。
谢谢
import pandas as pd
data = [['CZK', '125.45', 1], ['CZK', '1726', 3], ['CZK', '135', 2], ['CZK', '2152.33', 3]]
df = pd.DataFrame(data, columns=['currency', 'rate', 'nights'])
#---------------
data2 = [['CZK', '125.45', 1], ['CZK', '1726|1726|1726', 3], ['CZK', '135|135', 2], ['CZK', '2152.33|2152.33|2152.33', 3]]
df2 = pd.DataFrame(data2, columns=['currency', 'rate', 'nights'])
#---------------
df['pipecount'] = (df['nights'] - 1) # 获取所需的管道数 "|";
# df['Rate'] = ['|'.join(s[i:]) for i, s in zip(df['pipecount'], df['Daily Rate'].str.split('|'))]
# df = df.drop(['pipecount'], axis=1)
print("Before")
print(df)
print('\n')
print("After")
print(df2)
请注意,我已经注释掉了一些代码,因为您的原始代码中有一些错误,并且部分代码与您的描述不匹配。您需要根据您的需求进行一些修正。
英文:
I'm working on a puzzle where I have one amount value(string) listed in a "rate" column. Working with the rate column, I need to multiply the rate times the "nights" column and separate each rate value(string) with a "|"pipe character. There will never be a need for the pipe character at the 1st or last position.
Any help that you can provide to get me moving forward I would appreciate it.
Thanks
import pandas as pd
data = [['CZK', '125.45', 1], ['CZK', '1726',3], ['CZK', '135',2],
['CZK','2152.33',3]]
df = pd.DataFrame(data, columns=['currency', 'rate','nights'])
#---------------
data2 = [['CZK', '125.45',1], ['CZK', '1726|1726|1726',3], ['CZK',
'135|135',2],['CZK','2152.33|2152.33|2152.33',3]]
df2 = pd.DataFrame(data2, columns=['currency', 'rate','nights'])
#---------------
df['pipecount'] = (df['nights'] - 1) # Gets the number of PIPEs needed "|"
#df['Rate'] = ['|'.join(s[i:]) for i, s in zip(df['pipecount'], df['Daily
Rate'].str.split('|'))]
#df = df.drop(['pipecount'], axis=1)
print("Before")
print(df)
print('\n')
print("After")
print(df2)
答案1
得分: 2
你可以使用字符串操作:
df['rate'] = df['rate'].astype(str).add('|').mul(df['nights']).str.strip('|')
print(df)
# 输出结果
currency rate nights
0 CZK 125.45 1
1 CZK 1726|1726|1726 3
2 CZK 135|135 2
3 CZK 2152.33|2152.33|2152.33 3
细节部分:
steps = pd.concat([
out := df['rate'].astype(str).add('|'),
out := out.mul(df['nights']),
out := out.str.strip('|')
], axis=1, keys=['step1', 'step2', 'step3'])
print(steps)
# 输出结果
step1 step2 step3
0 125.45| 125.45| 125.45
1 1726| 1726|1726|1726| 1726|1726|1726
2 135| 135|135| 135|135
3 2152.33| 2152.33|2152.33| 2152.33|2152.33|2152.33
请注意,这些是代码的翻译部分,不包括其他内容。
英文:
You can use string manipulation:
df['rate'] = df['rate'].astype(str).add('|').mul(df['nights']).str.strip('|')
print(df)
# Output
currency rate nights
0 CZK 125.45 1
1 CZK 1726|1726|1726 3
2 CZK 135|135 2
3 CZK 2152.33|2152.33|2152.33 3
Details:
steps = pd.concat([
out := df['rate'].astype(str).add('|'),
out := out.mul(df['nights']),
out := out.str.strip('|')
], axis=1, keys=['step1', 'step2', 'step3'])
print(steps)
# Output
step1 step2 step3
0 125.45| 125.45| 125.45
1 1726| 1726|1726|1726| 1726|1726|1726
2 135| 135|135| 135|135
3 2152.33| 2152.33|2152.33|2152.33| 2152.33|2152.33|2152.33
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论